es6 函数的 length 属性 && 带参数的函数作用域
函数指定了默认值以后,函数的length属性,将返回没有指定默认值的参数个数。
(function (a) {}).length // 1
(function (a = 5) {}).length // 0
(function (a, b, c = 5) {}).length // 2 定义了 3 个参数,其中有一个参数c指定了默认值,因此length属性等于3减去1,最后得到2。
作用域
var x = 1;
function f(x, y = x) {
console.log(y);
}
f(2) // 2 默认值 变量x 指向第一个参数x,而不是全局变量x,所以输出是2。
let x = 1;
function f(y = x) {
let x = 2;
console.log(y);
}
f() // 1 参数y = x形成一个单独的作用域。这个作用域里面,变量x本身没有定义,所以指向外层的全局变量x
function f(y = x) {
let x = 2;
console.log(y);
}
f() // ReferenceError: x is not defined 函数体内部的局部变量x 影响不到 默认值变量x。全局变量x不存在,就会报错。
浙公网安备 33010602011771号