ES6函式擴充套件和解構賦值理清

2021-09-18 04:13:15 字數 1436 閱讀 6629

// 寫法一

function m1( = {})

// 寫法二

function m2( = )

請問這兩個的寫的有什麼區別?一開始看到這個我是蒙的?因為這裡將函式的預設值的es6寫法和es6寫法的解構賦值放在了一起。

在這裡,函式的引數都變成了物件,而es6的解構複製就是將利用兩個物件的對比來進行賦值進而簡化**

而阮老師給出的答案是

// 函式沒有引數的情況

m1() // [0, 0]

m2() // [0, 0]

// x和y都有值的情況

m1() // [3, 8]

m2() // [3, 8]

// x有值,y無值的情況

m1() // [3, 0]

m2() // [3, undefined]

// x和y都無值的情況

m1({}) // [0, 0];

m2({}) // [undefined, undefined]

m1() // [0, 0]

m2() // [undefined, undefined]

我們解決問題都是從大到小,從簡單到複雜,在函式的引數傳值比較複雜的情況下也是利用從外到裡的看

呼叫m1()首先看外層,沒有引數,所以啟用預設值即最右邊=右邊的{},那麼再看內層,這裡面沒有符合x y的引數 所以就會啟用內層x y的預設值 所以結果為[0,0]

呼叫m1()內層外層都不會啟用預設值所以為 [3,8]

呼叫m1()外層有{}的物件不啟用外層預設值,但是內層沒有引數y,所以y啟用內層預設值結果為[3,0]

呼叫m1({})外層有{}的物件不啟用外層預設值,內層無x y,所以啟用x y預設值 結果為 [0,0]

呼叫m1()同上

呼叫m2()首先看外層,沒有引數,所以啟用預設值 即最右邊=右邊的,那麼結果為[0,0]

呼叫m2()內層外層都不會啟用預設值所以為[3,8]

呼叫m2()外層有{}的物件不啟用外層預設值 內層y沒有預設值,所以就結果為[3, undefined]

呼叫m2({})外層有{}的物件不啟用外層預設值,內層無x y 且x y 無預設值,結果為[undefined, undefined]

呼叫m1()同上

ES6 解構賦值

陣列的解構賦值 let a,b 12,13 let a,b,c d 13,15,16 let a,b c 78,12 23 let x,y 1,3,5 x 1,y 3 let x,y,z a x a,y undefined z let h,b 1,2,3,4 1,2,3,4 預設值 let x tr...

ES6解構賦值

一 基本用法 解構 destructuring 按照一定的模式,從陣列或者物件中提取值,對變數進行賦值。let par1,par2,par3 1,2 console.log par1,par2,par3 1 2 不完全解構時par3對值為undefined 解構賦值允許指定變數對預設值。let pa...

es6解構賦值

coding changes the world accumulating makes yourself 主要從三個方面講述 陣列式的解構賦值 物件式的解構賦值 函式中的解構賦值 preface 現今的變數宣告語法十分的直接 左邊是乙個變數名,右邊可以是乙個陣列 的表示式或乙個物件 的表示式,等等。...