Skip to main content

立即执行函数

例子,下面形成了闭包

参考:step2-作用域-块级作用域原理-作用域和闭包

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");
}());