gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 17:50:19 25 4
gpt4 key购买 nike

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

最佳答案

Are there reasons not to do this?

这会与规范冲突,规范说函数的元数 (.length) 是在具有默认值的第一个参数或其余参数之前声明的参数的数量。 (这个定义 starts here ;遵循它是...有趣。但这就是它的归结。)

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

关于javascript - 为什么 Babel 使用 `arguments` 对象作为可选参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44482606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com