[b,a] = [a,b]和const [b,a] = [a,b]之间有什么区别

时间:2019-04-04 15:31:47

标签: javascript destructuring

在销毁过程中,这两个代码的结果确实有所不同。我不确定为什么。

提示说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时,该值未切换。

1 个答案:

答案 0 :(得分:11)

  

提示说const [b,a] = [a,b]将导致a,b的值未定义(从左到右的简单分配规则)。我不明白为什么会这样。

不会。如果FreeCodeCamp说了,那就错了。

如果在const之前添加[b,a] = [a,b],则会得到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