【发布时间】:2017-07-20 18:07:18
【问题描述】:
有一个Function.prototype.arity 属性用于获取函数期望的参数数量。现在它已经过时了(从 JS 1.4 开始),同样的目标有 Function.prototype.length。
但是最近我在文档中发现了一篇关于Array.prototype.reduce 方法的文章。它清楚地表明该方法的属性length 等于1:
reduce方法的length属性为 1。
这篇确切的文章有一个带有多个参数的标题,其中有两个:
Array.prototype.reduce ( callbackfn [ , initialValue ] )
callbackfn 和 initialValue(可选)。
所以我不清楚length 属性的确切用途。
如果它是用来给开发者提供有用信息的,那么它实际上并没有。
如果它只是一个技术自动生成的属性,只是表示函数定义中的参数数量,那为什么不保持它的一致性呢?
【问题讨论】:
-
ECMAScript 5.1, Section 15.3.5.1,
length: "length 属性的值是一个整数,表示函数期望的“典型”参数数量。但是,语言允许使用其他数量的参数调用函数。" -
reduce需要一个参数(必需的),另一个是可选的,所以不计算在内! -
至少你需要一个回调函数来运行reduce。
-
旁注:
length属性是单个实例的属性,而不是原型属性; spec。Function.prototype具有length属性的唯一原因是Function.prototype是Function实例(主要是出于历史原因)。
标签: javascript ecma262