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