函数运行时所需要的信息
在最新的ES2018中,执行上下文包括
- 词法环境(获取变量或this时)
- 变量对象(声明变量时)
- code evaluation state:恢复代码执行位置
- Function:正在被执行的函数
- Realm:‘国度’,代表了基础库和内置对象的实例
- Generator:生成器
在生成执行上下文的时候有两个阶段:生成阶段和执行阶段。
#53
生成阶段是指解释器会寻找需要提升的变量,提前在内存中开辟好空间,函数声明会直接把函数体放进内存中,变量或提前赋值为undefined
。
函数声明的优先级更高,会覆盖掉同名变量。let也会提升,只不过因为暂时性死区不允许在声明之前使用。
对于非匿名的立即执行函数的问题
当遇到非匿名的立即执行函数时,会创建一个辅助对象,以当前的函数名为key,因为在函数内部在可以访问到a,但是这个值是只读的,修改不成功所以返回函数体。
var a = 1;
void (function a() {
a = 100;
console.log(a);
})();
// ƒ a(){ a = 100; console.log(a)}
❤️ 转载文章请注明出处,谢谢!❤️