function callDad () {
var numb = '0122822122';
console.log('Calling ' + numb);
}
callDad();
1) 由于函数callDad
是全局声明的,因此在调用之前将其保存在全局执行上下文中。
2) 一旦函数callDad
被调用,就会创建一个新的执行上下文并在堆栈上执行。
问题:在全局执行上下文中对函数的原始引用会发生什么?该函数是否在内存中存储了两次?
附加问答(供参考):
问:@Bergi 感谢您的回复。我认为问题应该是:由于全局执行上下文已经将函数存储在内存中。为什么新的执行上下文会有新的创建阶段?谢谢
A:@Ash 创建阶段是针对被调用函数体内的变量,具体在你的例子中是 numb
问:@Rodrigo 那么一旦函数被调用,它是从窗口对象中引用的吗?既然函数声明已经存在内存中的引用和创建阶段,那么为什么他们说每个新的执行上下文都有一个新的创建阶段呢?
A: 是的,函数总是从窗口对象中引用。执行上下文只是范围和范围链(闭包中其他范围的变量)。一旦创建了执行上下文,创建阶段就会为该上下文中的变量分配内存。哦,记住,在 JS 中,你有函数作用域,而不是块作用域。