[英]Understanding the Context of Curly Brackets '{}'
我一直在審查其他人的代碼,而總體而言,ES2015可以得到一些利用,但是,我一直沉迷於Destructuring。
以前,在Javascript中,“花括號” {}
用於塊或對象。 例如
// Curly Brackets Block
If () {
...
}
// Curly Brackets in Obj
var obj = {
a : 1,
...
}
但是,在解構中,我們一次又一次看到以下語法:
let a = ({ a, b }) => {
}
我的問題是,參數容器是實際對象還是僅僅是塊? 請說明以下內容是否與上面的代碼相同:
let a = ( a, b ) => {
}
編輯:從閱讀Axel Rauschmayers關於破壞的文章(到目前為止)我的理解是,我們只是在繪制道具。 總是變成新的Obj? 即:
let a = { first : a, second : b } = AnObj;
===
a.a === AnObj.first;
a.b === AnObj.second;
以上正確嗎? obj總是實例化嗎? 但是,這與上面的函數沒有任何意義,因此為道具創建的對象將是一個匿名對象,對嗎?
非常感謝,
不,解構過程中的花括號不會形成塊或對象文字。
它們絕對不是一個塊,因為它們不是語句(並且不包含語句列表),它們是類似於對象文字的表達式。 實際上,它們甚至具有與對象文字相同的語法,唯一的區別是它們位於分配目標(分配運算符的左側)或函數參數的位置。
let a = ({ a, b }) => {…}
與let a = ( a, b ) => {…}
嗎?
不,真的不是。 兩個參數列表的確聲明了函數作用域的變量a
和b
,但是第一個函數期望一個對象具有.a
和.b
屬性,而第二個函數期望兩個參數。
我的理解是,我們只是將屬性映射到新的obj?
否。沒有創建/實例化新對象。 只有您傳入的對象(右側)。 然后將其解構 (“拉開”)成塊,然后分配給各個子目標(變量,屬性引用)。
來寫
a.b = anObj.first;
a.c = anObj.second;
與您要使用的解構任務
({first: a.b, second: a.c}) = anObj;
(括號是區分表達式與塊所必需的)。
但是,更常見的用例是變量初始化。 你可以縮短
let b = anObj.first,
c = anObj.second;
至
let {first: b, second: c} = anObj;
當變量與屬性具有相同的名稱時,還有一個簡寫形式
let first = anObj.first,
second = anObj.second;
相當於
let {first, second} = anObj;
let a = { first : a, second : b } = anObj;
正確?
不,那沒有多大意義。 它會去糖
let a;
a = anObj.first;
b = anObj.second;
a = anObj;
它用於銷毀:
var obj = {a: 1, b: 2},
add = ({a, b}) => a + b;
console.log(add(obj)); //3
因此,基本上在函數內部的語句中會出現兩個參數,但是調用它時,只會傳遞一個對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.