// 寫法一
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 現今的變數宣告語法十分的直接 左邊是乙個變數名,右邊可以是乙個陣列 的表示式或乙個物件 的表示式,等等。...