首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么JavaScript中有function.apply.length 2?

为什么JavaScript中有function.apply.length 2?
EN

Stack Overflow用户
提问于 2018-08-04 23:56:48
回答 2查看 120关注 0票数 3

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

代码语言:javascript
复制
(function test(){
   console.log(function(){}.apply.length);
})();

输出为:2

我读到过关于Function length的报道。我理解MDN上的函数长度部分。但我不明白这个。函数中没有参数。为什么输出是2?

EN

回答 2

Stack Overflow用户

发布于 2018-08-05 00:03:26

因为apply接受2个参数。如果不应用,它将显示0

代码语言:javascript
复制
(function test() {
  console.log(function() {}.length)
})();

票数 2
EN

Stack Overflow用户

发布于 2018-08-05 00:36:35

length属性表示函数所需的参数数量。

例如:

代码语言:javascript
复制
function boy() {}
function girl(name, age) {}

如果选中first first Function length boy.length,则选中expected output: 0,因为函数接收的参数为0。第二个函数收到两个参数,因此girl.length输出将为2

快速总结:

代码语言:javascript
复制
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的默认值;但是,它对函数执行没有影响。

代码语言:javascript
复制
const fn1 = (a            , b            ) => { }
const fn5 = (a = undefined, b = undefined) => { }
fn5.length // -> 0

当然,fn1和fn5的行为完全相同。唯一可观察到的区别是函数长度。

根据规范,在内部,出现在带有default的参数之后的没有default的参数被认为是可选的,未定义为默认值。

代码语言:javascript
复制
(function test(){
   console.log(function(){}.apply.length);
})();

在这段代码中,.apply()接受2参数。所以它的长度是2

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51687273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档