Page 64 - 你不知道的JavaScript(下卷)
P. 64
因此,应该将函数值视为一个表达式,与其他的值或者表达式类似。
考虑:
var foo = function() {
// ..
};
var x = function bar(){
// ..
};
第一个赋给变量 foo 的函数表达式被称为是匿名的,因为这个函数表达式没有名称。
第二个函数表达式是已命名的(bar),即使它的引用赋值给了变量 x。虽然匿名函数表达
式的使用仍然极为广泛,但通常更需要已命名函数表达式。
要想获取更多信息,参见本系列中的《你不知道的 JavaScript(上卷)》第一部分。
2.5.1 立即调用函数表达式
在前面的代码片段中,两个函数表达式都没有运行——如果加上 foo() 或者 x(),那么就
可以执行了。
还有另一种方法可以执行函数表达式,这种方法通常被称为立即调用函数表达式
(immediately invoked function expression,IIFE):
(function IIFE(){
console.log( "Hello!" );
})();
// "Hello!"
(function IIFE(){ .. }) 函数表达式外面的 ( .. ) 就是 JavaScript 语法能够防止其成为普
通函数声明的部分。
表达式最后的 ()(即 })(); 这一行)实际上就表示立即执行前面给出的函数表达式。
这看起来可能有点奇怪,但实际上并不像初看上去那么诡异。思考 foo 和这里的 IIFE 的类
似之处:
function foo() { .. }
// foo函数引用表达式,然后()执行它
foo();
// IIFE函数表达式,然后()执行它
(function IIFE(){ .. })();
深入 JavaScript | 41
图灵社区会员 avilang(1985945885@qq.com) 专享 尊重版权