目录
函数参数的默认值
直接写在参数定义的后面,若无该参数才会使用默认值。
function log(x, y = 'World') {
console.log(x, y);
}
log('Hello') // Hello World
log('Hello', 'China') // Hello China
log('Hello', '') // Hello
function Point(x = 0, y = 0) {
this.x = x;//设置了全局对象的变量x
this.y = y;
}
const p = new Point();
p // { x: 0, y: 0 }
注意!不可再用let,const声明参数,否则报错!
与解构赋值默认值结合使用
function foo({x, y = 5}) {
console.log(x, y);
}
foo({}) // undefined 5
foo({x: 1}) // 1 5
foo() // TypeError: Cannot read property 'x' of undefined
使用了对象的解构赋值默认值,没有使用函数参数的默认值。则注意!只有当函数foo的参数是一个对象时,变量x和y才会通过解构赋值生成,因此foo()没有参数,导致报错。解决方法如下(若无参则为空对象
)。
function foo({x, y = 5} = {}) {
console.log(x, y);
}
foo() // undefined 5
且注意:
传入undefined(即没有该参数),将触发该参数等于默认值,null则为(有一个空参数)所以不等于默认值。
默认值的位置
建议!
都设置为尾参数。原因:1。容易看出来;2。保证该参数可省略,否则之后的参数都默认为默认参数,可省略
函数的length属性
js函数的length属性,将返回参数个数。然而指定默认值后,length属性将只返回没有指定默认值的参数个数。
!!若默认值不是尾参数,那么length属性也不再计入后面的参数了。
作用域
函数进行声明初始化时,参数会形成一个单独的作用域。等到初始化结束,这个作用域就会消失。
举例子:此处的参数y获得了参数X传来的值,而非全局x
var x = 1;
function f(x, y = x) {
console.log(y);
}
f(2) // 2
var x = 1;
function foo(x = x) {
// ...
}
foo() // ReferenceError: x is not defined
快捷链接
全部React学习笔记的目录 Click Here>>
全部Javascript学习笔记的目录 Click Here>>
Less学习笔记 Click Here>>
安利一波前端开发推荐使用的工具 Click Here>>
ESLint问题记录 Click Here>>
github各类实战练习源码下载 Click Here>>
如果你觉得我的东西能帮到你,无限欢迎给我的github库点个收藏Star~0v 0~