如何解决解密JS Array.prototype.reverse
最近,我决定深入了解JS基准测试,并决定要击败原生反向功能,我应该了解它的内在作用。
我一直在阅读array.prototype.reverse的ECMAscript docs,尽管使用的语法有些神秘,但我收集了该方法执行一个半循环并将上限设置为长度-1 -i,这就是我要这样做的方式。在循环内部,我认为实际值交换由以下代码处理:
If lowerExists is true and upperExists is true,then
Perform ? Set(O,lowerP,upperValue,true).
Perform ? Set(O,upperP,lowerValue,true).
Set ( O,P,V,Throw )方法似乎是一个动作动词,因为它实际上设置了一个值。让我们仔细看看。
抽象操作Set接受参数O(一个对象),P(一个属性键),V(一个ECMAScript语言值)和Throw(一个布尔值)。它用于设置对象的特定属性的值。 V是该属性的新值。调用时,它将执行以下步骤:
Assert: Type(O) is Object.
Assert: IsPropertyKey(P) is true.
Assert: Type(Throw) is Boolean.
Let success be ? O.[[Set]](P,O).
If success is false and Throw is true,throw a TypeError exception.
Return success.
第4行出现问题:function is defined in terms of itself。
我的问题是:
- array.prototype.reverse在后台有什么作用,我是否正在寻找合适的位置?
- Set(O,P,V,Throw)是否等于map.set(k,v)?
- 使用Set(O,P,V,Throw)方法可以获得什么效率?这实际上是使用的方法,还是仅仅是引擎执行的某种魔术的抽象表示?
- 可以完全按照常规javascript代码重新创建整个reverse()函数吗?我已经熟悉通常的examples on Stackoverflow。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。