function add(a,b){return a+b;}add(1,2); //3
存在函数提升,在js中最先执行
var add = function(a,b){return a+b;}add(1,2); //3
不存在函数提升,等到解析器解析到它时才会执行。
由于这是一个命名函数,js中有变量提升和函数提升,命名函数相当于把函数当做一个值赋给add这个变量,那么此时做的提升应该是:
var add;add = function(a,b){return a+b;}add(1,2); //3
自调用函数开启了一个新的作用域,避免了变量的污染。
将自调用函数中的局部变量提升为全局变量
;(function(){ var num = 1; window.num = num;})(window)
(function(a,b){ console.log(a+b); //3})(1,2)
var add = (function(a,b){ return a+b;})(1,2)
也就是创立Function对象
var add = new Function('a','b','return a+b');console.log(add(1,2));
注:传参参数必需加引号。
一般不推荐这种方法创立函数,会导致解析两次代码,降低性能。
函数构造法不能获取局部变量:
var num = 1;function foo(){ var num = 2; return new Function('return num');}foo()(); //1