[b,a] =[a,b] 和 const [b,a]=[a,b] 的区别是什么?

3
在解构赋值中,这两个代码的结果是不同的。我不确定为什么。
提示说const [b,a] = [a,b]会导致a,b的值变成undefined(简单赋值规则从左到右)。我无法理解为什么会这样。

let a = 8, b = 6;
(() => {
    [b,a]=[a,b];

})();
console.log(a); // should be 6
console.log(b); // should be 8

结果发生了改变,但是当使用const关键字时,值不会被切换。

“提示”?什么提示? - j08691
@j08691 的作业提示,可能是这样的。 - scottheckel
1
const 意味着它是常量...?也就是说它不能被改变... - mast3rd3mon
这是freeCodeCamp的流程。我遇到了困难,所以我点击了“提示”,他们给了我类似于那样的提示。但是我不能理解他们在说什么。 - 박충호
1个回答

11
提示说const [b,a] = [a,b]会导致a,b的值为未定义(简单的赋值规则是从左到右),我不明白这是为什么。 实际上,并不会产生这种情况。如果FreeCodeCamp说会发生,那是不正确的。 如果在[b,a] = [a,b]之前添加const,您将得到一个ReferenceError,因为您将使用内部变量来遮蔽外部的ab,并且尝试在它们初始化之前使用它们:

let a = 8, b = 6;
(() => {
    const [b,a]=[a,b];

})();
console.log(a); // should be 6
console.log(b); // should be 8

如果他们在最初的声明中使用const而不是let,那么也不会产生他们列出的效果。相反,您将收到TypeError,因为您正在尝试分配给常量:

const a = 8, b = 6;
(() => {
    [b,a]=[a,b];

})();
console.log(a); // should be 6
console.log(b); // should be 8


2
谢谢!Shadowing 是指外部变量和内部变量的名称相同吗? - 박충호
3
@박충호 - 这意味着有两个a变量和两个b变量:一个在函数内部,另一个在函数外部。如果在函数内声明了它们,则无法从函数内部使用函数外的变量,因为该声明隐藏(遮蔽)了外部变量。(在此上下文中,“变量”指“变量或常量”。技术术语是绑定。) - T.J. Crowder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接