当我在控制台上运行此代码时:
(function test(){
console.log(function(){}.apply.length);
})();
输出为:2
我读到过关于Function length的报道。我理解MDN上的函数长度部分。但我不明白这个。函数中没有参数。为什么输出是2?
发布于 2018-08-05 00:03:26
因为apply
接受2个参数。如果不应用,它将显示0
(function test() {
console.log(function() {}.length)
})();
发布于 2018-08-05 00:36:35
length属性表示函数所需的参数数量。
例如:
function boy() {}
function girl(name, age) {}
如果选中first first Function length boy.length
,则选中expected output: 0
,因为函数接收的参数为0。第二个函数收到两个参数,因此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,是最有趣的案例。
实际上,我会说它更有趣。解释器通常区分无默认值和设置为undefined的默认值;但是,它对函数执行没有影响。
const fn1 = (a , b ) => { }
const fn5 = (a = undefined, b = undefined) => { }
fn5.length // -> 0
当然,fn1和fn5的行为完全相同。唯一可观察到的区别是函数长度。
根据规范,在内部,出现在带有default的参数之后的没有default的参数被认为是可选的,未定义为默认值。
(function test(){
console.log(function(){}.apply.length);
})();
在这段代码中,.apply()
接受2
参数。所以它的长度是2
。
https://stackoverflow.com/questions/51687273
复制相似问题