函数运行时所需要的信息

在最新的ES2018中,执行上下文包括

  1. 词法环境(获取变量或this时)
  2. 变量对象(声明变量时)
  3. code evaluation state:恢复代码执行位置
  4. Function:正在被执行的函数
  5. Realm:‘国度’,代表了基础库和内置对象的实例
  6. Generator:生成器

在生成执行上下文的时候有两个阶段:生成阶段和执行阶段。

#53

生成阶段是指解释器会寻找需要提升的变量,提前在内存中开辟好空间,函数声明会直接把函数体放进内存中,变量或提前赋值为undefined

函数声明的优先级更高,会覆盖掉同名变量。let也会提升,只不过因为暂时性死区不允许在声明之前使用。

对于非匿名的立即执行函数的问题

当遇到非匿名的立即执行函数时,会创建一个辅助对象,以当前的函数名为key,因为在函数内部在可以访问到a,但是这个值是只读的,修改不成功所以返回函数体。

var a = 1;
void (function a() {
  a = 100;
  console.log(a);
})();
// ƒ a(){ a = 100; console.log(a)}
❤️ 转载文章请注明出处,谢谢!❤️