211   JS

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内部到变量,也可以用外部到变量




One Response

Leave a Reply

Your email address will not be published. Required fields are marked *