关于ES6的块级作用域的问题?

"块级作用域的出现,实际上使得获得广泛应用的立即执行匿名函数(IIFE)不再必要了"

书的链接

在看阮一峰老师关于ES6的那本书里有上面这样一句话,不是很理解
希望哪位大大可以帮我解答一下。

阅读 5k
5 个回答

ES6以前变量的作用域是函数范围,有时在函数内局部需要一些临时变量,因为没有块级作用域,所以就会将局部代码封装到IIEF中,这样达到了想要的效果又不引入多余的临时变量。而块作用域引入后,IIEF当然就不必要了!

function f(){
    ...
    swap(var_a,var_b);
    (function swap(a,b){
        var tmp;
        tmp = a;
        a = b;
        b=tmp;
    })(var_a,var_b);
}

如上面的代码,tmp被封装在IIFE中,就不会污染上层函数;而有块级作用域,就不用封装成IIEF,直接放到一个块级中就好。

function f(){
    let a,b;
    ...
    {
        let tmp;
        tmp = a;
        a = b;
        b=tmp;
    }
}

更简单的说法是,立即执行匿名函数的目的是建立一个块级作用域,那么现在已经有了真正的块级作用域,所以立即执行匿名函数就不需要了。

JavaScript有很多致命的缺陷,所以机智的开发者们想出了各种奇淫技巧来弥补它设计上的以及历史上遗留下来的坑.

比如JavaScript中没有namespace(命名空间),而且只有function(函数)代码的内部可以隔离作用域,自调用,立即执行函数则可以用来防止变量扩散到全局,这样就能很好的避免各种JavaScript库产生冲突。

上面的回答很棒,我就不回答了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进