圖片引用阮一峯es6教程es6
對圖片中例子的理解:函數
function move( {x=0,y=0}={} ) {return[x,y];}
上面代碼 {x=0,y=0}={}
表示對象的解構賦值,而且解構賦值的默認值爲x=0,y=0;
spa
等號右邊的空對象{}表示解構賦值中的值,等號左邊的{x=0,y=0}
表示解構賦值中的變量。可是因爲值爲空對象,至關於裏面爲undefined,因此若是隻有{x=0,y=0}={}
的話,賦值的結果是x=0,y=0
的。code
可是因爲函數能夠傳參數,因此move( {x:3,y:8} )
,就至關於在function裏面這樣的表示:對象
{x=0,y=0} = {x:3,y:8}
對象的解構賦值右邊對象有值了,再也不是空對象了,也就是說對象裏面再也不是undefined了,那麼解構賦值中就不能使用默認值x=0,y=0了,因此賦值的結果是x=3,y=8.教程
在move( {x:3,y:8} )
中咱們稱{x:3,y:8}
爲參數,而稱move的定義函數圖片
function move( {x=0,y=0}={} ) {return[x,y];}
中等號右邊的空對象爲參數賦值的默認值,也就是說{}是move函數參數的默認值,若是move函數不傳參,那麼對象解構的時候是按照{x=0,y=0}={}
來解構的。若是函數傳參obj,則按照{x=0,y=0}=obj
來解構。ip
補充一點,
function move( {x=0,y=0}={} ) {return[x,y];}
裏面,{x=0,y=0}={}
中={}
不能去掉,由於{x=0,y=0}
是一個對象,若是使用move
函數的時候不傳參,即move()
,那麼就意味着{x=0,y=0} = undefined
了,這樣就會報錯。也就是函數參數的默認值不能省略。it
這篇文章的目的是爲了區分 解構賦值默認值{x=0,y=0}
和 參數默認值的不一樣。io