Javascript:使用IIFE和block语句之间的区别

时间:2018-07-25 21:24:11

标签: javascript syntax scope block iife

IIFE主要用于封装范围

(function () {
    let myVar = 10; // not global
    // ...
}());

但是为什么不只使用block语句呢?

{
    let myVar = 10; // also not global
    // ...
}

除了作用域封装,使用IIFE还有其他好处吗?

3 个答案:

答案 0 :(得分:1)

IIFEs利用了功能范围。用var声明的函数和变量在父函数范围内。

Block statements利用了块范围。用letconst声明的变量在该块内作用域。

Block语句不封装用var声明的函数或变量。

答案 1 :(得分:1)

Block语句是最新功能。是的,在引入之前,通常使用IIFE。

如今,我至少可以想到一种无法替代IIFE的情况。看这个:

(async () => { const foo = await someAsyncFunction() })()

看到了吗? await关键字只能存在于async函数中,因此,如果您的await包含的表达式尚未被任何函数包装,则必须通过异步IIFE对其进行包装。

答案 2 :(得分:0)

试试这个你会更好地理解这个概念:

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 更改为 let,您将无法访问 console.log 语句中的某些内容