gpt4 book ai didi

javascript - 致所有 JavaScript 专家 : why does this happen?

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

为什么这段代码:

function answer(x) {
function closure() {
var x = x || 42;
console.log(x);
}
closure();
}
foo();

总是打印42?

逻辑是 foo(31337) 会打印 31337,因为在 closure x 中将是 31337,所以 x || 42 的计算结果为 31337。但事实并非如此。

我只是想不通,所以我将其张贴在这里,希望能从真正的 JavaScript 大师那里得到启发。

最佳答案

function answer(x) {
function closure() {
var x = x || 42;
console.log(x);
}
closure();
}
answer(20);

在闭包内部将 x 定义为局部变量。这意味着它隐藏了来自链上层答案函数的参数 x。由于您使用 var 语句声明了 x,因此它默认为 undefined

然后 x || 42undefined || 42 即 42。

这里的问题是您使用了相同的名称。如果你做了 x = x || 42 它将是 x = 28 || 42 将 x 设置为 28。

区别在于使用 var 语句创建一个名为 x 的新函数局部变量。一旦你这样做了,就没有办法引用作用域链更高层的同名变量。

阐明解释器的工作原理。像这样:

function() {
var x = 52;
foo();
function foo() {
...
}
}

转换成

function() {
function foo() {

}
var x;
x = 52;
foo();
}

关于javascript - 致所有 JavaScript 专家 : why does this happen?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5693708/

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