在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...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。