一个很奇怪的 现象 ,求解析 :
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
一个很奇怪的 现象 ,求解析 :
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
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.
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
这是函数
参数传默认值
的问题。定义了默认值的参数,必须是函数的尾部参数,其后不能再有其他无默认值的参数。
这是因为有了默认值以后,该参数可以省略,只有位于尾部,才可能判断出到底省略了哪些参数。
所以这儿的length指的是,
函数的参数个数减去指定了默认值的参数个数
。