函數參數的解構

clipboard.png

圖片引用阮一峯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

相關文章
相關標籤/搜索