在继续说闭包之前先复习一下立即执行函数
先来两种常见的格式吧:
(function(形参列表){函数体}(实参列表));
(function(形参列表{函数体}))(实参列表);
以上两种都是常见的立即执行函数的形式。
那么,这样写的原因是什么?我们只能这么去写嘛?
原因是有的,当然也还有别的写法:
立即执行函数其实有这样的规则:函数表达式 + ()
这个括号叫做执行符号。
函数声明包括函数定义和函数表达式。
这个叫声明:function a(){}
这个叫表达式:var a = function(){};
那既然是函数表达式 + (),那能这样写吗?
var test = function(){
console.log(123);
}();
必须可以啊!根本没有不行的理由。
我们一开始给出来的写法(function(){}());
外层的()就是要把函数声明通过运算符变成表达式使用,那么,
+function (){}();
!function(){}();
…
这个故事告诉我们,立即执行函数格式不固定 \( ̄︶ ̄)/
Last but not least