以下PureScript代码:
fibs 0 = 1
fibs 1 = 1
fibs n = fibs (n-1) + fibs (n-2)
编译为以下JavaScript:
var fibs = function (v) {
if (v === 0) {
return 1;
};
if (v === 1) {
return 1;
};
return fibs(v - 1 | 0) + fibs(v - 2 | 0) | 0;
};
除了“| 0”似乎有点不必要之外,这一切都很有意义。这是优化吗?或者使其对未定义或NaN具有鲁棒性?
答案 0 :(得分:3)
为整数插入|0
可确保值不会意外地变为浮点或超出int32的范围 - 这可以保证按位操作在Int
值上的行为也符合预期。
理论上它可能是一个优化,因为asm.js认为|0
暗示一个值也是一个int,但我认为在实践中这是一厢情愿的想法它会对普通的JS程序产生影响!