函数参数中的销毁分配究竟如何工作?

Ele*_*Ele 2 javascript destructuring

我不明白为什么函数调用中的销毁逻辑实际上是在声明一个新变量。

function fn() {}
let object = {x: "Ele", y: "From", z: "Stack"};

fn({x} = object);

console.log(x);
Run Code Online (Sandbox Code Playgroud)

其次,下面的逻辑有什么问题。我得到了Uncaught ReferenceError: x is not defined。但是,当我使用时var效果很好。

function fn() {}
let object = {x: "Ele", y: "From", z: "Stack"};

fn({x} = object);

let x = "Dummy";
console.log(x);
Run Code Online (Sandbox Code Playgroud)

我以前的逻辑知识不足。

T.J*_*der 6

...实际上是在声明一个新变量

这就是我所谓的“内隐全球性恐怖”。这行:

fn({x} = object);
Run Code Online (Sandbox Code Playgroud)

有效地:

({x} = object);
fn(object); // a bit of hand-waving here, but roughly speaking...
Run Code Online (Sandbox Code Playgroud)

由于它是分配给一个未声明的变量,因此会创建一个全局变量。如果您使用的是严格模式,则将获得ReferenceError:

分配的结果就是所分配的值。在进行销毁分配的情况下,分配的值就是正在销毁的事物(object在您的情况下为的值)。

...其次,下面的逻辑有什么问题。我越来越Uncaught ReferenceError: x is not defined

添加时出现的问题let x是,分配给的行x现在位于的声明的时间死区中xx此时保留,但未初始化。错误消息显示为“未定义”,因为该let x行尚未执行。好像你有:

x = 0;
let x;
Run Code Online (Sandbox Code Playgroud)