使用IIFE(立即调用函数表达式)和{...}有什么区别吗?

3
(function() {
  let val = 10;
  console.log(val); // 10
})() // executed immediately
console.log(val); // val is not defined

VS

{
    let val = 10;
    console.log(val); //10 
} // executed immediately
console.log(val) // val is not defined

这两个代码片段看起来具有相同的效果。这两种方法可以互换使用吗?我有什么遗漏吗?


只有在使用 constlet 时,块才能正常工作。如果使用 var,则其作用域将限定为最近的函数(如果不存在,则为全局)。 - Joseph
1个回答

3
使用块级作用域和 let 关键字与在此情况下使用 IIFE 相同,但更加高效。
IIFE 模式早于 JavaScript 添加 let 关键字,因此更为常见(并支持 IE10 及更早版本)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接