《ES6标准入门》中提到函数的length属性,看到有函数的length属性这一说法,其实之前一直都不知道有。并且不知道这个length有何应用……查阅了MDN Function.length是这样描述的:

length 是函数对象的一个属性值,指明该函数期望多少个参数,意即形参的个数。数量不包括剩余参数。相比之下,arguments.length 是函数被调用时实际传参的个数。

1
2
3
4
5
function test(a,b,c) {}
test.length // 3
function test(a,b,c,d) {}
test.length // 4

看起来很简单,但是也有特殊的,如果函数内部是通过arguments 调用参数,而没有实际定义参数的话,length只会的得到0。

1
2
function test() { console.log( arguments );}
test.length // 0

这个函数确实可以传入参数,而且内部也调用了参数,但是length却无法得知传入的参数的个数。
只能在函数执行的时候通过arguments.length得到实参个数。

1
2
3
function test() { console.log( arguments.length );}
test(1,2,3); // 输出 3
test(1,2,3,4); // 输出 4

所以函数的length属性只能得到他的形参个数,而无法得知实参个数。

参考链接:js小记 function 的 length 属性

本文地址: https://lxchuan12.github.io/2016/10/09/20161009-function-length/