0

只是想了解 IIFE 函数是如何在 JavaScript 引擎的底层执行的。

我知道每个新函数在调用堆栈上都有执行上下文,但是如果在特定函数中调用 IIFE 函数,那么它会为 IIFE 创建新上下文,还是会在调用它的同一上下文中执行?

function myFunction(){
  console.log('inside the myFunction');
  (function(){
      console.log('inside the IIFE')
  })()
}
myFunction();

那么如何为普通函数和 IIFE 创建执行上下文呢?

4

1 回答 1

2

您的意思可能是“IIFE”或“立即调用函数表达式”。

是的,IIFE 会产生自己的执行上下文。当 IIFE 被调用时,它进入调用栈,当函数结束时,它从调用栈中被移除,就像普通的命名函数一样。毕竟,递归调用 IIFE 也会导致堆栈溢出:

(function iife() { iife() })();

就像命名函数一样,IIFE 甚至可能有只在其中定义的变量,并且有自己的参数:

(function (param) {
  const someOtherVarName = true;
})('param');

console.log(typeof param, typeof someOtherVarName);

因此,就执行上下文和变量范围而言,IIFE 和命名函数的调用之间并没有太大区别。

于 2019-12-11T05:35:39.267 回答