Babel为什么使用`arguments`对象作为可选参数?

iuliu.net

关于可选参数,我注意到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;
}
TJ人群

有没有理由不这样做吗?

这会与规范冲突,该规范说.length函数的arity()是在具有默认值的第一个参数或其余参数之前的已声明参数的数量。(此定义从这里开始;遵循它的定义很有趣。但这就是它的含义。)

myFunction在第一个参数之前没有默认值的声明参数,因此具有length == 0如果按照您的建议进行了转译,则将其转载length == 2,这将违反规范。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python:为什么不能在方法中使用self.variable作为可选参数?

为什么不能在函数参数列表中使用匿名对象作为参数?C ++

使用枚举作为可选参数

Ruby - 为什么使用 Block 作为参数?

为什么localStorage不能作为对象使用?

为什么 JavaScript 在使用对象作为键时隐式字符串化参数值?

为什么 FormRecord 不允许使用对象作为第一个参数?

为什么以及何时在R中使用可选的perl参数

Javascript-以可选参数作为对象的函数?

Python对象作为类讲师的可选参数

使用 Babel 转译 Node.js + TypeScript 应用程序:为什么不使用可选链?

为什么不能将默认值作为null以外的可选参数提供?

为什么.bind()放在可选参数的前面?

为什么要使用-1作为参数实例化Date?

为什么 continueWith 使用 action(of task) 作为参数?

为什么使用标准类型作为模板参数?

jQuery:为什么使用匿名函数作为参数?

为什么SqlConnection作为参数传递时使用引用类型?

为什么使用数组作为键访问对象中的元素?

为什么函数不像 JS 中的其他对象(对象、数组)那样作为参数传递是可变的?

将带有可选/默认属性的对象作为参数的函数?

使用可选参数对象注册autofac组件

@Path 作为可选参数?

使用arguments对象代替参数

为什么TypeScript在必需参数之后需要可选参数?

调用方法时使用字典参数作为可选参数

为什么Swift UITableViewController模板在tableView cellForRowAtIndexPath方法中使用可选参数?

为什么不能使用getopt在选项和可选参数之间留空格?

为什么我们不能使用忽略的可选参数调用委托实例?