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