关于可选参数,我注意到babel做出了一些奇怪的移植决定。以下ES6代码:
function myFunction(x = 2, y = 3) {}
被移植到
function myFunction() {
var x = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 2;
var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 3;
}
我很快将就ES6语法的简短程度和简洁程度以及在ES5中的外观(通常通过Babel)进行介绍。但是对我来说,这似乎有点强迫,而且性能也要差很多。有没有理由不这样做?:
function myFunction(x, y) {
x = x === undefined ? 2 : x;
y = y === undefined ? 3 : y;
}
有没有理由不这样做吗?
这会与规范冲突,该规范说.length
函数的arity()是在具有默认值的第一个参数或其余参数之前的已声明参数的数量。(此定义从这里开始;遵循它的定义很有趣。但这就是它的含义。)
您myFunction
在第一个参数之前没有默认值的声明参数,因此具有length == 0
。如果按照您的建议进行了转译,则将其转载length == 2
,这将违反规范。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句