1

在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...


HappyCodingTop
526 声望847 粉丝

Talk is cheap, show the code!!