繁体   English   中英

JavaScript全局执行上下文

[英]JavaScript Global Execution Context

 function callDad () { var numb = '0122822122'; console.log('Calling ' + numb); } callDad(); 

1)由于函数callDad是全局声明的,因此在调用之前将其保存在全局执行上下文中。
2)一旦调用函数callDad就会创建一个新的执行上下文并在堆栈上执行。

问题:在全局执行上下文中,对函数的原始引用会发生什么? 该功能是否在内存中存储了两次?

附加问答(仅供参考)

问:@Bergi感谢您的答复。 我认为问题应该是:由于全局执行上下文已经将该函数存储在内存中。 为什么新的执行上下文具有新的创建阶段? 谢谢

答:@Ash创建阶段是针对被调用函数体内的变量,在您的示例中特别是麻木

问:@Rodrigo那么,一旦调用了函数,就可以从窗口对象中对其进行引用? 由于内存中的引用和函数声明的创建阶段已经存在,那么为什么他们说每个新的执行上下文都有一个新的创建阶段?

答:是的,该函数始终从窗口对象中引用。 执行上下文只是作用域和作用域链(闭包中其他作用域的变量)。 创建执行上下文后,创建阶段将为该上下文内的变量分配内存。 哦,请记住,在JS中,您具有函数作用域,而不是块作用域。

在全局执行上下文中,对函数的原始引用会发生什么?

没有。 通常只存储一次。

(当为不同的参数类型多次存储经过分析和优化的函数时,可能会有一些例外,但这是特定于实现的,超出了此问题)

该功能是否在内存中存储了两次?

不会。但是函数的执行上下文会多次存储(和处置)-与调用函数的次数相同。

在浏览器环境中(但不是在Node.js中),该函数将附加到window对象,因此仅创建一次,并停留在该位置。 因此,对该功能的引用保持不变。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM