簡體   English   中英

究竟如何在函數參數中進行解構分配?

[英]Exactly how do destructuring assigments in function arguments work?

我不明白為什么函數調用中的解構邏輯實際上是在聲明一個新變量。

 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); 

我對之前的邏輯缺乏了解。

......實際上聲明了一個新變量

這就是我所說的“隱形全球恐怖” 這一行:

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的值,在您的情況下)。

......其次,下面邏輯中的問題是什么。 我得到了Uncaught ReferenceError: x is not defined

添加let x時的問題是分配給x的行現在位於時間死區中,用於聲明x x在該點保留 ,但未初始化。 錯誤消息顯示“未定義”,因為let x行尚未執行。 好像你有:

x = 0;
let x;

首先回答第二個問題:在聲明之前,不能使用let (在本例中為x )聲明的變量。 在執行{ x } =你會解構為x

現在當你執行fn({ x } = object) ,它基本上是一個函數調用,其第一個參數是賦值表達式,並且總是求值為右側的結果。 a=b求值為b{x} = object求值為object

我不明白為什么函數調用中的解構邏輯實際上是在聲明一個新變量。

對尚未聲明的標識符的任何賦值都會隱式創建全局變量。 "use strict"模式來防止這種情況發生。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM