function callDad () {
var numb = '0122822122';
console.log('Calling ' + numb);
}
callDad();
1)由于函数callDad
是全局声明的,因此在调用之前将其保存在全局执行上下文中。
2)一旦调用函数callDad
,就会在堆栈上创建并执行新的执行上下文。
问题:在全局执行上下文中,对函数的原始引用会发生什么?该功能是否在内存中存储了两次?
其他问题(仅供参考):
Q:@Bergi感谢您的答复。我认为问题应该是:由于全局执行上下文已经将该函数存储在内存中。为什么新的执行上下文具有新的创建阶段?谢谢
A:@Ash创建阶段用于被调用函数体内的变量,在您的示例中特别是numb
Q:@Rodrigo那么,一旦调用该函数,就可以从窗口对象中对其进行引用?由于内存中的引用和函数声明的创建阶段已经存在,那么为什么他们说每个新的执行上下文都有一个新的创建阶段?
A:是的,该函数始终从窗口对象中引用。执行上下文只是作用域和作用域链(闭包中其他作用域的变量)。创建执行上下文后,创建阶段将为该上下文内的变量分配内存。哦,请记住,在JS中,您具有函数作用域,而不是块作用域。
答案 0 :(得分:2)
什么都没有。通常仅将它们存储一次。
(当针对不同的参数类型多次存储经过分析和优化的函数时,可能会有一些例外,但这是特定于实现的,不在此问题范围之内)
不。但是,函数的执行上下文会被多次存储(和处置)-与调用函数的次数相同。
答案 1 :(得分:0)
在浏览器环境中(而不是在Node.js中),该函数将附加到window
对象,因此该函数仅创建一次,并停留在该位置。因此,对该函数的引用保持不变。