gpt4 book ai didi

javascript - arguments.slice() 应该在 ES5 中工作吗?

转载 作者:行者123 更新时间:2023-11-30 16:47:00 26 4
gpt4 key购买 nike

我在看Crockford on Javascript - Act III: Function the Ultimate在 41 分 26 秒左右。他屏幕上的代码使用 arguments.slice() 的方式 causes an error对我来说。

function curry(func){
var args = arguments.slice(1);
...
}

他是这样解释的:

I'll first get an array of arguments, except the first one, because the first one is a function and I don't need that one. In this case I'm assuming I'm on ES5, so I'm not doing the awful Array.prototype.apply() trick.

问题是运行 arguments.slice() 会导致这个错误:

未捕获的类型错误:arguments.slice 不是函数

我正在测试肯定有 ES5 的现代浏览器!让代码工作的唯一方法是使用一些“糟糕”的技巧,(他这样调用它们)例如Array.prototype.slice.apply(arguments, [1])[].slice.call(arguments, 1);

他只是误会了吗?他的幻灯片有错别字吗?为什么 arguments.slice() 在我的 ES5 浏览器中不起作用?

最佳答案

Quoting TC39 成员 Allen Wirfs-Brock:

Until very late in the development of ECMAScript 5, argument object were going to inherit all of the Array.prototype methods. But the "final draft" of ES5 approved by TC39 in Sept. 2009 did not have this feature.

让 arguments 对象继承自 Array 原型(prototype)实际上是有计划的,但在实践中它 broke the web .因此,在正式发布之前,它已从最终修订版中删除。


如今,随着 ECMAScript 2015(又名 ES6)标准化,最好的方法是使用 rest parameters :

function curry(func, ...args) {
// ...
}

相当于 ES5:

function curry(func) {
var args = [].slice.call(arguments, 1);
// ...
}

此功能已在 Firefox 和 Edge 中原生可用,如果您使用 JavaScript 编译器(例如 Babel),则随处可用。 .

关于javascript - arguments.slice() 应该在 ES5 中工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31084359/

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