【问题标题】:Side-effects when calling %TypedArray%.prototype.set on itself?对自身调用 %TypedArray%.prototype.set 时的副作用?
【发布时间】:2018-06-21 14:11:04
【问题描述】:

Section 22.2.3.22.2 of the ECMAScript spec 中的第 24 项提到,当源缓冲区和目标缓冲区具有相同的值时,即在代码中调用 a.set(a, 0);a 是 TypedArray 时,实现应该克隆源缓冲区(它提到潜在的副作用)。

我的问题是为什么需要进行这种克隆?如果不需要,有什么代码示例会产生可观察到的副作用?

【问题讨论】:

  • 克隆的是缓冲区,而不是目标。
  • 看起来这是规范中的错字,谢谢。
  • 实际上现在我想这并不重要,因为当克隆必须发生时它们是相同的:) 我需要更多的咖啡。
  • 我将该行与规范的第 8 版进行了比较,他们确实将其更改为 srcBuffer,所以你是对的!不知道为什么这很重要,我想这是我的问题的一部分。

标签: javascript ecmascript-6 language-lawyer


【解决方案1】:

有问题的规范文本是这样的:

b.将 srcBuffer 设置为 ? CloneArrayBuffer(srcBuffer, srcByteOffset, srcByteLength, %ArrayBuffer%)。
注意:%ArrayBuffer% 用于克隆 srcBuffer,因为已知它没有任何可观察到的副作用。

这个注释是说使用%ArrayBuffer% 构造函数(而不是this.constructorthis.constructor[@@species],这更典型),因为众所周知调用%ArrayBuffer% 不会有任何副作用。

【讨论】:

    猜你喜欢
    • 2015-10-01
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 2014-11-10
    • 2018-08-05
    • 2013-05-09
    • 2011-01-21
    • 2015-09-05
    相关资源
    最近更新 更多