据我了解,IIFE模式是一个解决ES5及以下无法创建块范围的事实。通过将所有内容包装在函数中并立即调用它,我们可以创建一个范围。
既然let
和const
会获得更多浏览器的支持,这是否会减少对IIFE模式等内容的需求?
答案 0 :(得分:14)
是的,只要块范围声明(functions,let
/const
/class
)被广泛采用,块就会取代IEFE。你需要一个范围,例如关闭?这里有一个块,无论是循环体还是声明列表的一部分。
然而,仍然有一个IEFE的应用,块无法取代:模块模式。块没有返回值,并且变更更高范围的变量很难看,因此我们仍然会在创建需要私有状态的对象时看到函数表达式:
const example = (() => {
…
return …;
}());
答案 1 :(得分:4)
虽然浏览器可能会开始支持这一点,但总会有一些随机浏览器过时或者没有计划支持。在它成为所有主流浏览器的标准版之前,仍然建议您继续使用IIFE模式,直到在所有主要使用的浏览器中找到它为止。您可以做的事情是让脚本(或谷歌分析)发送有关这是否未定义的信息,直到您至少有90%的信息表明它未定义,您应该继续使用IIFE。
答案 2 :(得分:-1)
是的,非常值得推荐使用const
和let
以及ES6的所有新功能。
目前所有浏览器可能都不支持它,但您可以在应用程序中使用像babel这样的编译器,以确保它们可以在任何地方使用。