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