【发布时间】:2018-07-25 21:24:10
【问题描述】:
IIFE主要用于封装作用域
(function () {
let myVar = 10; // not global
// ...
}());
但为什么不直接使用块语句呢?
{
let myVar = 10; // also not global
// ...
}
除了作用域封装之外,使用 IIFE 还有其他好处吗?
【问题讨论】:
-
变量
myVar不是全局变量,因为关键字let。 -
一旦 IIFE 完成,闭包中未返回的任何内容都将被丢弃,否则使用块语句,无论变量包含在什么范围内,都不一定会删除,
myvar可能会被删除留在一个更大的范围内,不希望或保证在其中可用。 -
块范围是 ES6+ 的特性,它在 IE 等旧浏览器中不起作用。此外,只有 const 和 let 声明的变量是块作用域的。对于 var 你需要 IIFE
-
块没有返回值。 IIFE 将来可能会被
doexpressions 取代。 -
我意识到我可能会用太多的词混淆这个问题。道歉!不太罗嗦的版本是 IIFE 可以立即将某些内容返回到它被调用的范围内,而不会污染任何更高的范围或导致多次声明同一变量的语法错误。
标签: javascript syntax scope block iife