gpt4 book ai didi

javascript - 为什么这个JS代码打印undefined?

转载 作者:行者123 更新时间:2023-11-30 08:00:30 25 4
gpt4 key购买 nike

我不明白为什么 foo 的值在以下代码中未定义:

var foo = 1;

function bar() {
if (false) {
var foo = 10;
}
alert("Foo is " + foo);
}

bar();

结果:Foo 是未定义https://jsfiddle.net/yk7ae9b0/

而这些变体的行为符合预期。

var foo = 1;

function bar() {
if (true) {
var foo = 10;
}
alert("Foo is " + foo);
}

bar();

结果:Foo 是 10

var foo = 1;

function bar() {
if (false) {
// var foo = 10;
}
alert("Foo is " + foo);
}

bar();

结果:Foo 为 1

任何帮助将不胜感激。

最佳答案

您的 var foo 未在您认为的位置定义。 JavaScript 中变量的作用域是使用它们的函数,而不是声明它们的 block 。因此,您拥有的代码:

function bar() {
if (false) {
var foo = 10;
}
alert(foo);
}

被 JS 引擎解释为 实际上 就好像它是这样写的:

function bar() {
var foo;
if (false) {
foo = 10;
}
alert(foo); // foo was never assigned a value!
}

因此,当警报触发时,您有一个 undefined variable foo,它隐藏了您在函数外声明的全局 foo

(这也会影响诸如 for(var i=...) ... 之类的事情——var i 是函数范围的,并且将是一个已声明的变量函数内的任何地方,而不仅仅是在你的 for 循环内)

关于javascript - 为什么这个JS代码打印undefined?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29438078/

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