IIFE主要用于封装作用域
(function () {
let myVar = 10; // not global
// ...
}());但是为什么不直接使用块语句呢?
{
let myVar = 10; // also not global
// ...
}除了作用域封装之外,使用IIFE还有其他好处吗?
发布于 2018-11-19 11:18:34
块语句是非常新的特性。是的,在引入它们之前,通常使用IIFE代替。
现在我至少能想到一种情况,IIFE是不可替代的。看看这个:
(async () => { const foo = await someAsyncFunction() })()看到了吗?await关键字只能存在于async函数中,因此如果你的await-containing表达式还没有被任何函数包装,你必须用异步生命包装它。
发布于 2018-11-19 11:12:01
IIFEs利用了函数作用域。用var声明的函数和变量的作用域在父函数内。
Block statements利用了块作用域。用let和const声明的变量在块中的作用域。
Block语句不封装用var声明的函数或变量。
发布于 2021-03-22 19:22:39
试试这个,你会更好地理解这个概念:
if(true){
var something = 'something' // This is global now. Block scoping for var works fine inside function definition but not for **if statements** or similar ones
}
console.log(something)尝试将var更改为,让在console.log语句中无法访问。
https://stackoverflow.com/questions/51527870
复制相似问题