ES6中的函數參數默認值

在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

相關文章
相關標籤/搜索