ES6中的函数参数默认值

4次阅读

共计 1166 个字符,预计需要花费 3 分钟才能阅读完成。

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

正文完
 0