gpt4 book ai didi

javascript - 了解 Javascript 作用域和变量

转载 作者:行者123 更新时间:2023-11-29 16:53:17 24 4
gpt4 key购买 nike

我已经开始了一项任务,即实际探索并尝试深入理解 Javascript。在我的旅程中,我想出了以下代码,但我对输出感到困扰,尤其是因为我似乎无法解释它的输出但它没有抛出任何错误:

var test = 1;
var func = function(){
console.log(test);
for(x=0;x!=1;x++) {
var test = test + x;
console.log(test);
};
};
console.log(test);
func();

我希望输出是:

1
1
1 (or possibly an error due to scoping issues)

我实际得到的是:

1
undefined
NaN

我可以购买 NaN,因为在我看来,我已经在本地限定了一个名为 test 的变量,并且我正在将它初始化为自身加上 ​​x。我可以将其视为明显的失败,但不会引发任何错误。真正让我困惑的是“未定义”。这不应该输出全局范围的 test 吗?

最佳答案

Javascript 是函数作用域,而不是 block 作用域。此外,var 声明被提升到函数定义的顶部。所以你的代码等同于:

var test = 1;
var func = function(){
var test;
console.log(test);
for(x=0;x!=1;x++) {
test = test + x;
console.log(test);
};
};
console.log(test);
func();

这就是为什么有些人(例如 Doug Crockford,jslint 的作者)提倡总是将声明放在函数的顶部,因为无论如何解释器都是这样读取它们的。

关于javascript - 了解 Javascript 作用域和变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34375111/

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