为什么在JavaScript中使用function.apply.length 2?

时间:2018-08-04 15:56:48

标签: javascript function apply

当我在控制台上运行此代码时:

(function test(){
   console.log(function(){}.apply.length);
})();

输出为:2

我了解了Function length。我了解MDN上的函数长度部分。但是我不明白。功能中没有参数。为什么输出2?

4 个答案:

答案 0 :(得分:5)

这是因为您要索取.length的{​​{1}},它的 thisArg argArray Function.prototype.apply

19.2.3.1Function.prototype.apply ( thisArg, argArray ) 2

答案 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 值作为参数调用函数