const和让IIFE模式不必要吗?

时间:2015-11-05 00:11:14

标签: javascript scope ecmascript-6 hoisting

据我了解,IIFE模式是一个解决ES5及以下无法创建块范围的事实。通过将所有内容包装在函数中并立即调用它,我们可以创建一个范围。

既然letconst会获得更多浏览器的支持,这是否会减少对IIFE模式等内容的需求?

3 个答案:

答案 0 :(得分:14)

是的,只要块范围声明(functionslet/const/class)被广泛采用,块就会取代IEFE。你需要一个范围,例如关闭?这里有一个块,无论是循环体还是声明列表的一部分。

然而,仍然有一个IEFE的应用,块无法取代:模块模式。块没有返回值,并且变更更高范围的变量很难看,因此我们仍然会在创建需要私有状态的对象时看到函数表达式:

const example = (() => {
    …
    return …;
}());

答案 1 :(得分:4)

虽然浏览器可能会开始支持这一点,但总会有一些随机浏览器过时或者没有计划支持。在它成为所有主流浏览器的标准版之前,仍然建议您继续使用IIFE模式,直到在所有主要使用的浏览器中找到它为止。您可以做的事情是让脚本(或谷歌分析)发送有关这是否未定义的信息,直到您至少有90%的信息表明它未定义,您应该继续使用IIFE。

答案 2 :(得分:-1)

是的,非常值得推荐使用constlet以及ES6的所有新功能。 目前所有浏览器可能都不支持它,但您可以在应用程序中使用像babel这样的编译器,以确保它们可以在任何地方使用。