立即执行函数

  • 参考:https://zhuanlan.zhihu.com/p/22465092

  • 立即执行函数 作用:
    创建一个独立的作用域。这个作用域里面的变量,外面访问不到(即避免「变量污染」)。

(function(){ /* code */ }());

为什么这样就能立即执行并且不报错呢?因为在javascript里,括号内部不能包含语句,当解析器对代码进行解释的时候,先碰到了(),然后碰到function关键字就会自动将()里面的代码识别为函数表达式而不是函数声明。
而立即执行函数并非只有上面的一种写法,写法真是五花八门:

// 最常用的两种写法
(function(){ /* code */ }()); // 老道推荐写法
(function(){ /* code */ })(); // 当然这种也可以
 
// 括号和JS的一些操作符(如 = && || ,等)可以在函数表达式和函数声明上消除歧义
// 如下代码中,解析器已经知道一个是表达式了,于是也会把另一个默认为表达式
// 但是两者交换则会报错
var i = function(){ return 10; }();
true && function(){ /* code */ }();
0, function(){ /* code */ }();
 
// 如果你不怕代码晦涩难读,也可以选择一元运算符
!function(){ /* code */ }();
~function(){ /* code */ }();
-function(){ /* code */ }();
+function(){ /* code */ }();
 
// 你也可以这样
new function(){ /* code */ }
new function(){ /* code */ }() // 带参数
原文地址:https://www.cnblogs.com/cag2050/p/6783121.html