当我在控制台上运行此代码时:
(function test(){
console.log(function(){}.apply.length);
})();
输出为:2
我了解了Function length。我了解MDN上的函数长度部分。但是我不明白。功能中没有参数。为什么输出2?
答案 0 :(得分:5)
这是因为您要索取.length
的{{1}},它的 thisArg 和 argArray 是Function.prototype.apply
答案 1 :(得分:2)
由于<-- two parameters
接受2个参数。如果不应用,它将显示0
apply
答案 2 :(得分:1)
length属性指示函数期望的参数数量。
例如:
function boy() {}
function girl(name, age) {}
如果您先检查函数长度boy.length
,然后检查expected output: 0
,因为该函数接收的参数为0。第二个函数接收了2个参数,因此girl.length
的输出将为{{1 }}。
快速摘要:
2
最后一个是fn4,是最有趣的情况。
实际上,我会说这更加有趣。解释通常区分没有默认值和设置为undefined的默认值。但是,它对函数执行没有影响。
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
当然,fn1和fn5的行为完全相同。唯一可观察到的区别是函数长度。
根据规范,在内部,默认值出现在默认值之后的“默认值”参数被认为是“可选的,未定义为其默认值”。
const fn1 = (a , b ) => { }
const fn5 = (a = undefined, b = undefined) => { }
fn5.length // -> 0
在此代码中,(function test(){
console.log(function(){}.apply.length);
})();
接受.apply()
参数。所以它的长度是2
。
答案 3 :(得分:0)
通常,apply()方法使用给定的 this 值作为参数调用函数