JS基础---立即执行函数表达式IIFE

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

由于函数被包含在()内部,因此成为了一个表达式,在末尾加上()可以立即执行这个函数。

相对于传统的IIFE形式,还有另一种形式(function(){.......}( ))。第一种形式中函数表达式被包含在()中,然后在后面用另一个()调用,第二种用来调用的()括号被移进了用来包装的()中。这两种形式在功能上是一致的。

IIFE的另一种用法:把它当做函数调用,并传参进去。

var a=2;
(function IIFE(global){
var a=3;
console.log(a);//3
console.log(global.a);//2
})(window);
console.log(a);//2
这个模式的另一个应用场景是解决undefined标识符的默认值被错误覆盖导致的异常。将一个参数命名为undefined,但是在对应的位置不传入任何值,这样就可以保证在代码块中undefined标识符的值真的是undefined。
undefined = true; // 给其他代码挖了一个大坑! 绝对不要这样做!
(function IIFE( undefined ) {
var a;
if (a === undefined) {
console.log( "Undefined is safe here!" );
}
})();
IIFE 还有一种变化的用途是倒置代码的运行顺序, 将需要运行的函数放在第二位, 在 IIFE执行之后当作参数传递进去。 这种模式在 UMD( Universal Module Definition) 项目中被广泛使用。
var a=2;
(function IIFE( def ) {
def( window );
})(function def( global ) {
var a = 3;
console.log( a ); // 3
console.log( global.a ); // 2
});
函数执行过程:因为IIFE为立即执行函数,所以,函数def(global)当做参数会被传入IIFE(def)中,此时def=def(global);执行def(window)时,global=window;调用下面的def(global)函数,注意此时,参数global已经是window了,所以执行结果为3,2.





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值