IIFE(立即调用函数表达式)

先看小题一道

//代码4
var a = 2;
    (function(){
        console.log(a) 
        a = 5
        console.log(a);
        console.log(window.a);
        var a = 20
        console.log(a);
    })()
    //虽然它能够正确的执行,但是严格意义上来说,它并不是一个闭包,
    // 因为它不是在本身的词法作用域之外执行的。
    // 它确确实实产生了闭包的效果,因此也有种说法叫他为小闭包。

这里使用到了立即执行函数,这是一个被称为 自执行匿名函数 的设计模式,主要包含两部分。第一部分是包围在 圆括号运算符 () 里的一个匿名函数,这个匿名函数拥有独立的词法作用域。这不仅避免了外界访问此 IIFE 中的变量,而且又不会污染全局作用域。

第二部分再一次使用 () 创建了一个立即执行函数表达式,JavaScript 引擎到此将直接执行函数。

当函数执行时,不能访问其外部变量。所以第一个a只是在函数中定义了还没赋值所以输出undefined,第二个a已经被赋值为5,输出5,第三个window.a是2,第四个相当于赋值a=20,输出20。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值