我们都知道,ES6里函数默认参数是有暂时性死区的,首先我们先来看看关于函数默认参数的注意点:
●参数默认值的注意点:
1,在使用默认参数时,arguments 对象的值不反映参数的默认值,它只反映传给参数的默认值
function test(a=1){//这我们使用函数参数默认值a=1
console.log(arguments[0])//我们这里在控制台输出arguments[0]来看看能不能出来1
}
test()
这里我们可以看到 输出的是undefined
2,与严格模式一样,修改命名参数也不会影响arguments对象,它始终以调用函数时传入的值为准
function show(a = 10) { //这里给函数设置一个默认参数 a=10
a = 12 //然后再将12赋给a
console.log(arguments)//输出一下arguments对象,
//检查一下arguments是否能够反映修改后的默认参数
}
show()
这里我们可以看到 arguments对象依然不能反映修改后的默认值参数
3,函数的默认参数,只有在函数被调用时才会求值,不会在函数定义时求值
4,箭头函数同样也可以使用默认参数,必须使用括号
5,暂时性死区: 后定义的默认值可以引用先定义的参数,但是前定义的默认值不能引用后定义的参数
tips:当我们函数有一个默认值参数,一个普通参数的时候,我们调用函数传参的时候要注意了:如果你只传一个参数,这个参数默认会传递给你函数的第一个参数,这时候输出第二个参数就是undefined,所以如果第一个参数需要他使用默认值的时候,调用函数时第一个参数得填undefined
function show(a = b, b) {
console.log(a)
console.log(arguments)
}
show(undefined, 2)
//当我们先定义的默认参数去引用后定义的参数时就会报错
参数存在于自己的作用域中,它们不能引用函数体的作用域