据我了解,IIFE 模式是解决 ES5 及以下无法创建块作用域这一事实的方法。通过将所有内容包装在一个函数中并立即调用它,我们可以创建一个作用域。
现在,let
并且const
将获得更多浏览器的支持,这是否减少了对 IIFE 模式之类的需求?
据我了解,IIFE 模式是解决 ES5 及以下无法创建块作用域这一事实的方法。通过将所有内容包装在一个函数中并立即调用它,我们可以创建一个作用域。
现在,let
并且const
将获得更多浏览器的支持,这是否减少了对 IIFE 模式之类的需求?
是的,块要更换IEFEs,一旦块范围的声明(功能,let
/ const
/class
)被广泛采用。您需要一个范围,例如用于关闭?这里有一个块,可以是循环体,也可以只是语句列表的一部分。
但是,IEFE 仍然有一个应用程序块无法替代:module模式。块没有返回值,并且改变更高范围的变量是丑陋的,所以我们仍然会在需要私有状态的对象的创建中看到函数表达式:
const example = (() => {
…
return …;
}());
尽管浏览器可能开始支持此功能,但总会有一些随机浏览器已过时或不打算对此提供支持。在它成为所有主要浏览器的标准之前,仍然建议您继续使用您的 IIFE 模式,直到在所有主要使用的浏览器上找到它为止。你可以做的是让一个脚本(或谷歌分析)发送关于这是否未定义的信息,直到你得到至少大约 90% 的信息说它不是未定义的,你应该继续使用 IIFE。
是的,非常值得推荐使用const
以及let
ES6 的所有新功能。目前可能并非所有浏览器都支持它,但您可以在应用程序中使用像 babel 这样的编译器来确保它们可以在任何地方工作。