以下代码有什么问题:
CoffeeScript的:
sqrt = (n) ->
small = 0.01
lo = 0
hi = (n+1)/2
while hi > lo
mid = (lo+hi)/2
diff = Math.pow(mid, 2) - n
sign = (diff > 0) ? 1 : 0
if Math.abs(diff) < small
return mid
else
switch sign
when 1
hi = mid
when 0
lo = mid
console.log (sqrt 33)
使用Javascript:
// Generated by CoffeeScript 1.3.3
(function() {
var sqrt;
sqrt = function(n) {
var diff, hi, lo, mid, sign, small, _ref;
small = 0.01;
lo = 0;
hi = (n + 1) / 2;
debugger;
while (hi > lo) {
mid = (lo + hi) / 2;
diff = Math.pow(mid, 2) - n;
sign = (_ref = diff > 0) != null ? _ref : {
1: 0
};
if (Math.abs(diff) < small) {
return mid;
} else {
switch (sign) {
case 1:
hi = mid;
break;
case 0:
lo = mid;
}
}
}
};
console.log(sqrt(33));
}).call(this);
另一件事是当你处于无限循环或递归调用时,你甚至无法打开控制台。浏览器只是冻结了。这太烦人了。任何人都可以了解这一点吗?
答案 0 :(得分:2)
这部分:
sign = (diff > 0) ? 1 : 0
应该是:
sign = if (diff > 0) then 1 else 0
?
是为存在运算符保留的。
另请参阅:documentation
答案 1 :(得分:0)
相应于你的coffeescript代码
sign = (_ref = diff > 0) != null ? _ref : {
1: 0
};
应该看起来像
sign = (diff > 0) ? 1 : 0;