在ES6以前,不能直接爲函數的參數指定默認值,只能採起變通的方法。在ES6以前,不能直接爲函數的參數指定默認值,只能採起變通的方法。函數
fn(x,y){ y= y || this.sum console.log(x,y) //hello word } data(){ return{ sum:'word' } }, created(){ this.fn('hello') }, methods:{ fn(x,y){ y= y || this.sum console.log(x,y) //hello word } }
ES6語法的好處:
1.簡潔
2.閱讀代碼的人能夠看出哪些參數是能夠省略的,不用查看函數體或文檔
3.有利於未來的代碼優化,即便將來的版本即便拿掉這個參數,之前的代碼也能夠運行
還有參數變量是默認聲明的,不能在函數體內部再進行聲明。優化
created(){ this.fn('hello') }, methods:{ fn(x,y="kugou"){ console.log(x,y) //hello kugou } } fn({x=0,y=0}){ return [x,y] } } let a = this.fn({x:1}) console.log(a) //[1,0] let a = this.fn({}) console.log(a) //[0,0] created(){ let a = this.fn({}) console.log(a) // [Undefined, Undefined] }, methods:{ fn({x,y}={x:0,y:0}){ return [x,y] } let a = this.fn({y:3}) console.log(a) // [Undefined, 3]
參數默認值的位置
一般狀況下,定義了默認值的參數應該是函數的尾參數。由於這樣比較容易看出,到底省略了哪些參數,若是非尾部的參數設置默認值,實際上這個參數是沒法省略的。
若是有默認值的參數都不是尾參數,這時,沒法只省略該參數而不省略其後的參數,除非顯示輸入Undefined。若是傳入Undefined,那麼就會觸發默認值,可是null沒有這個效果。
函數的length屬性
若是函數指定了默認值後,函數的length屬性就不會包含有默認值的參數。這是由於length屬性的含義是,該函數預期傳入的參數個數,某個參數指定默認值以後,預期傳入的參數個數就不包括
這個參數了,同理,rest參數也不會計入length屬性。
函數參數默認值的類型
(1)變量
若是函數參數的默認值是一個變量,則該變量所處的做用域和其餘變量的做用域規則相同,便是先前函數的做用域,而後再是全局做用域。
(2)函數
若是函數A的參數默認值是函數B,那麼因爲函數的做用域是其聲明的時候所在的做用域,函數B的做用域就在全局做用域而不是函數A的做用域。
連接:https://blog.csdn.net/qq_3202...this