gpt4 book ai didi

javascript - 函数参数中的解构赋值到底是如何工作的?

转载 作者:行者123 更新时间:2023-12-03 16:44:29 25 4
gpt4 key购买 nike

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

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

fn({x} = object);

console.log(x);

其次,下面的逻辑有什么问题。我收到 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);

我对以前的逻辑缺乏了解。

最佳答案

...actually declaring a new variable

这就是我所说的The Horror of Implicit Globals .这一行:

fn({x} = object);

是有效的:

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

因为它分配给一个未声明的变量,所以它创建了一个全局变量。如果你使用的是严格模式,你会得到一个 ReferenceError:

"use strict";

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

fn({x} = object);

console.log(x);

赋值的结果是赋值。在解构分配的情况下,分配的值是被解构的东西(object 的值,在您的情况下)。

...secondly, what's the problem in the logic below. I'm getting Uncaught ReferenceError: x is not defined

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

x = 0;
let x;

关于javascript - 函数参数中的解构赋值到底是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55797127/

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