length 属性表示函数期望的参数数量。
例如:
function boy() {}
function girl(name, age) {}
如果你检查第一个函数长度boy.length然后是expected output: 0,因为函数接收到的参数是0。第二个函数接收到2个参数,所以girl.length输出将是2。
快速总结:
const fn1 = (a , b ) => { }
const fn2 = (a , ...b ) => { }
const fn3 = (a , b = 2) => { }
const fn4 = (a = 1, b ) => { }
fn1.length // -> 2
fn2.length // -> 1
fn3.length // -> 1
fn4.length // -> 0
最后一个 fn4 是最有趣的案例。
实际上,我会说它更有趣。解释一般区分无默认值和设置为未定义的默认值;但是,它对函数执行没有影响。
const fn1 = (a , b ) => { }
const fn5 = (a = undefined, b = undefined) => { }
fn5.length // -> 0
当然,fn1 和 fn5 的行为完全相同。唯一可观察到的区别是函数长度。
根据规范,在内部,出现在具有默认值的参数之后的没有默认值的参数“被认为是可选的,其默认值未定义”。
(function test(){
console.log(function(){}.apply.length);
})();
在此代码中.apply() 接受2 参数。所以它的长度是2。