gpt4 book ai didi

javascript - 函数是否设置在 javascript 'creation phase' 中的变量之前?

转载 作者:行者123 更新时间:2023-11-29 10:10:26 26 4
gpt4 key购买 nike

我正在学习 Udemy 类(class) Javascript: Understanding the Weird Parts现在,我刚刚了解了解释器解释 JS 时发生的创建阶段和执行阶段。

我有一个问题,但我会先向您展示我正在玩的代码:

http://codepen.io/rsf/pen/bEgpNY

b();

function b () {

console.log(a);
}

var a = 'peas';

b();

如果我理解正确,在创建阶段,变量和函数是“设置”的,这意味着它们在内存中被赋予了位置。变量都被赋予未定义的占位符值。然后在执行阶段,引擎执行从顶部开始的行。第一次调用 b() 时,'a' 的占位符值为 undefined,然后 'a' 的初始值为 'peas',再次调用 b(),此时 'a' 的值为 '豌 bean '。在我看来,这里必须发生两件事之一。备选方案 1:在创建阶段,所有变量都在函数之前设置。这意味着当函数 b() 的内存空间被创建时,该函数包括 a 的值 undefined(因为 'a' 内存空间已经用 'undefined' 的值创建)。备选方案 2:函数和变量按照它们所在的词法顺序设置(在这种情况下,b 在 a 之前创建),并且当 b 创建时,“a”引用以某种方式意味着函数正在监听任何可能创建“a”内存位置,当稍后实际创建“a”位置时,引用指向该位置。

对于这两种情况,我是否走在正确的轨道上?

最佳答案

你可以这样想。
您的原始代码:

b();

function b () {

console.log(a);
}

var a = 'peas';

b();

实际上是这样执行的:

var a;
function b () {
console.log(a);
}

b(); // log undefined because a doesn't have a value yet

a = 'peas';

b(); // log peas because a has a value

基本上所有的变量和函数定义都被提升到封闭范围的顶部。顺序并不重要,因为 b 函数中的代码只有在您实际调用该函数后才会执行。

关于javascript - 函数是否设置在 javascript 'creation phase' 中的变量之前?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34561157/

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