立即执行函数
例子,下面形成了闭包
function func() {
var a = 1;
(function () {
console.log(a)
}());
}
func(); // 1
预解析和立即执行
定义一个函数想要立即执行,写成如下形式是不可行的,在预解释的时候,它把它分解成两部分来对待,第一部分是fn函数,而第二部分是(),一个匿名函数,执行时会报错。如果小括号带参数,如(2),虽然不会报错,会打印出来2,但并不能把fn执行,也不能当成参数传递给fn函数。
function fn(){
//代码区
}() // Uncaught SyntaxError: Unexpected token ')'
function fn(){
//代码区
console.log('run fn')
}(2) // fn并不会执行,但整体会返回2
如果你想实现立即执行的函数,可以把要执行的函数放到一对括号里面,对于JavaScript 来说,括弧()里面不能包含语句,解析器在解析function关键字的时候,会将相应的代码解析成function表达式,而不是function声明
所以,只要将大括号将代码(包括函数部分和在后面加上一对大括号)全部括起来就可以了。 如下:
(function fn(){
//代码区...
}())
还可以写成:闭包。
(function(){
//代码区...
})();
自执行fn两种写法
// 写法1
(function func1(){
console.log("func1");
})();
// 写法2
(function func2(){
console.log("func2");
}());