本文解析JavaScript中函数length属性的含义,指出其代表形参个数而非实参个数。通过代码示例对比定义参数与使用arguments对象两种情况,说明length始终返回声明的参数数量,实际调用参数需通过arguments.length获取。
JavaScript 函数 length 属性详解:形参与实参的区别
对于熟悉JavaScript的开发者而言,获取数组或字符串的长度是基础操作,例如 [1,2,3].length 返回 3,"123".length 也返回 3。
然而,当面对 eval.length、RegExp.length、"".toString.length 以及 1..toString.length 时,这些表达式的结果分别是什么?
上述表达式的结果依次为 1、2、0 和 1。这些数值具体代表了什么含义?
这是许多初学者常问的问题。实际上,函数的 length 属性返回的是该函数定义时的形参个数。以下是一个简单的示例:
代码如下:
function test(a,b,c) {}
test.length // 3
function test(a,b,c,d) {}
test.length // 4
这看起来很简单,但存在特殊情况:如果函数内部通过 arguments 访问参数,而未在定义中显式声明参数,则 length 属性将返回 0。
代码如下:
function test() { console.log( arguments );}
test.length // 0
尽管该函数可以接收参数并在内部通过 arguments 访问,但 length 属性无法反映传入参数的实际数量。只有在函数执行期间,才能通过 arguments.length 获取实参个数。
代码如下:
function test() { console.log( arguments.length );}
test(1,2,3); // 输出 3
test(1,2,3,4); // 输出 4
因此,函数的 length 属性仅能获取其声明的形参个数,无法获知实际传入的实参个数。