5

在将 javascript 库移植到 Python 时,我发现了以下代码:

return Math.atan2(
    Math.sqrt(
       (_ = cosφ1 * sinΔλ) * _ + (_ = cosφ0 * sinφ1 - sinφ0 * cosφ1 * cosΔλ) * _
    ), 
    sinφ0 * sinφ1 + cosφ0 * cosφ1 * cosΔλ
);

我错了还是(_ = cosφ1 * sinΔλ) * _可以写成Math.pow(cosφ1 * sinΔλ, 2)

我猜作者试图避免使用 Math.pow,与临时分配相比,这在 javascript 中是否昂贵?

[更新]

截至 2016 年底,Chrome 53.0(64 位)的差异似乎没有以前那么大了。

4

1 回答 1

9

我能想到的唯一原因是性能。首先让我们测试一下他们是否真的做同样的事情并且我们没有忽略一些事情。

var test = (test = 5 * 2) * test; // 100
Math.pow(5 * 2, 2); // 100

正如预期的那样,事实证明这也是如此。现在让我们看看他们使用jsperf是否有不同的表现。在这里查看:http: //jsperf.com/...num-self

Firefox 23 的差异非常小,但对于 Safari,差异要大得多。在那里使用Math.pow似乎更昂贵。

于 2013-08-22T14:33:49.367 回答