昨天,我发现了奇怪的JavaScript行为。我编程了几年,但是我是第一次看到它。在此fib函数中:
function fib(n) {
var fiber = { arg: n, returnAddr: null, a: 0 };
rec: while (true) {
if (fiber.arg <= 2) {
var sum = 1;
while (fiber.returnAddr) {
fiber = fiber.returnAddr;
if (fiber.a === 0) {
fiber.a = sum;
fiber = { arg: fiber.arg - 2, returnAddr: fiber, a: 0 };
continue rec;
}
sum += fiber.a;
}
return sum;
} else {
fiber = { arg: fiber.arg - 1, returnAddr: fiber, a: 0 };
}
}
}
有奇怪的分配:
rec: while (true) { ... }
这是做什么的,以及如何调试/记录它?
这怎么可能?为什么?
有人可以解释吗?
我将不胜感激,这是第一件事