ES5中只有全局作用域和函数作用域,为了避免污染全局作用域,我们常常使用函数作用域来实现特定的功能
有些函数需要立即执行来初始化,为达到这个目的,有以下常见的立即执行函数
(function(){ /* code */ })();
其中最后的 () 就是立即执行的作用,为什么会在function外部再加上一个()呢?
主要是为了让JS引擎知道这是一个函数表达式,可以在其后面添加(),并立即执行;
如果是函数定义语句,后面加()会报语法错误。
为了让JS引擎识别是函数表达式的方式很多,比如下面
var i = function(){ return 10; }(); true && function(){ /* code */ }(); 0, function(){ /* code */ }(); !function () { /* code */ }(); ~function () { /* code */ }(); -function () { /* code */ }(); +function () { /* code */ }();
如果想在函数的作用域中使用全局变量,则传递window参数即可
(function(window){ /* code */ })(window);
这是JQ框架中常用的立即执行函数形式,即避免了外部到变量影响到JQ内部到变量,也可以用外部到变量
1