JavaScript中立即执行函数(IIFE)的不同形式

xiaoxiao2021-02-28  34

立即执行函数(IIFE),可以看做是一个自调用的匿名函数。例如:

var a = 2; (function (){ var a = 3; console.log(a); // 3 })(); console.log(a); // 2

通常我们使用的具名函数调用都是形如fn(),函数名加上一个括号执行的; 例如:

function fn(){ console.log('I am a normal function') } fn();

那么类似的立即执行函数可以像 function(){}() 执行吗?答案是不行的;因为 function(){} 没有名称标识符,函数声明不可以省略函数名,这在JavaScript语法中是非法的,但是函数表达式却可以是匿名的。当圆括号包裹函数时,它会默认将函数作为表达式去解析,而不是函数声明,所以给 function(){} 加个括号变成如下形式就可以了:

(function(){ console.log('I am aonymous function'); })();

上面所说的是立即执行函数的第一种形式,还有一种常见的形式是:

(function(){ console.log('I am aonymous function'); }());

以上立即执行函数的两种形式都比较常见,最后介绍一种不太常见的形式,这种变化的用途是倒置代码的运行顺序,将需要的函数放在第二位,在IIFE执行之后当做参数传递进去。下面用一个例子来说明:

var a = 2; (function (def){ def(window); })(function def(global){ var a = 3; console.log(a); // 3 console.log(global.a); // 2 });

函数表达式def定义在片段的第二部分,然后当做参数(这个参数也叫做def)被传递进IIFE函数定义的第一部分中。最后,参数def(也就是传递进去的函数)被调用,并将window传入当做global参数的值。

参考阅读

你不知道的JavaScript上卷>3.3.2 立即执行函数表达式JavaScript:立即执行函数表达式(IIFE)
转载请注明原文地址: https://www.6miu.com/read-1449980.html

最新回复(0)