函数声明 或 函数赋值 的 length 属性

一个很奇怪的 现象 ,求解析 :

let fo1 = function(x, y = 1) {}

fo1.length // 1

let fo2 = function(y = 1 ,x ) {}

fo2.length // 0

let fo3 = function(y , x ,z = 2) {}

fo3.length // 2

let fo4 = function(y , x ,z) {}

fo4.length // 3

阅读 3.1k
4 个回答

这是函数参数传默认值的问题。

定义了默认值的参数,必须是函数的尾部参数,其后不能再有其他无默认值的参数。
这是因为有了默认值以后,该参数可以省略,只有位于尾部,才可能判断出到底省略了哪些参数。

所以这儿的length指的是,函数的参数个数减去指定了默认值的参数个数

let fo1 = function(x, y = 1) {},这里的x为必传参数,而y就是默认值,当调用的时候,显示的长度就为实参的长度。注意,这里的必需参数必须写在函数的最前面。
可以去查看一下http://es6.ruanyifeng.com/#do...

js里函数的长度就是需要的参数个数,很多其他语言里带有默认值的参数都强制放后面的,js只是没那么严格罢了,但其解析器仍然只会解析第一个带默认值的参数前面部分的个数。
ps:js的很灵活随便的语言,但编码的时候仍然要按照严格的规范来,不然就会有这些奇怪的行为。

https://developer.mozilla.org...

length is a property of a function object, and indicates how many arguments the function expects, i.e. the number of formal parameters. This number excludes the rest parameter and only includes parameters before the first one with a default value.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题