gpt4 book ai didi

javascript - JavaScript 中的 'Execution Context' 到底是什么?

转载 作者:IT王子 更新时间:2023-10-29 02:56:23 26 4
gpt4 key购买 nike

我的标题几乎概括了所有内容。

任何人都可以启发我...

“什么是 JavaScript 中的‘执行上下文’?”

以及它与“this”、提升、原型(prototype)链、作用域和垃圾收集有何关系?

最佳答案

您要问的是几个不是很密切相关的不同概念。我将尝试简要介绍每一个问题。


执行上下文 是语言规范中的一个概念,通俗地说,它大致等同于函数执行的“环境”;也就是说,变量作用域(和 作用域链,来自外部作用域的闭包中的变量)、函数参数和 this 对象的值。

调用堆栈 是执行上下文的集合。

另见 this answerthis article .


Scope 的字面意思是:可以访问变量的范围。简单地说:

var x;

function a() {
var y;
}

x 可以从任何地方访问。当调用 a 时,x 将在外部范围内。 (存储在作用域链中。)

相比之下,y只能被a()中的代码访问,因为它被限制在a的范围内。这就是 var 关键字的作用:将变量限制在局部范围内。如果我们省略 vary 将最终进入全局范围,这通常被认为是一件坏事。


提升更多地视为编译时的事情。在 JavaScript 中,函数 声明 被“提升”到它们作用域的顶部。换句话说,它们在任何其他代码之前被解析和求值。 (这与内联计算的函数 表达式 相反。)请考虑以下内容:

a();
b();

function a() { }
var b = function() { }

a() 的调用将会成功,因为它的声明被提升到顶部; a 在程序开始执行之前被自动分配给。对 b() 的调用将因 TypeError 而失败,因为 b 直到第 4 行才会定义。

关于javascript - JavaScript 中的 'Execution Context' 到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9384758/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com