"Doug Crockford:JavaScript:The Good Parts"の次の機能よく働く。Javascript関数の明らかに矛盾する動作
var fibonacci = function() {
var memo = [0, 1];
var fib = function (c) {
console.debug(memo, c, memo[c]);
result = memo[c];
if (typeof result !== 'number'){
result = fib(c - 1) + fib(c - 2);
memo[c] = result;
}
return result;
};
return fib;
}();
console.log(fibonacci(3));
しかし、のはそれが予想されるものとは反対の、次の結果を示している4
console.debug(memo, c, memo[c]);
ラインに何が起こるかを詳細に見てみましょう。
memo, c, memo[c]
[0, 1, 1, 2] 3 undefined //contradictory behavior because I expect to have memo = [0, 1]
[0, 1, 1, 2] 2 undefined //contradictory behavior
[0, 1, 1, 2] 1 1
[0, 1, 1, 2] 0 0
[0, 1, 1, 2] 1 1
2
いくつかのアイデアがありますか?
+1 Chromeのオブジェクトを確実にログする唯一の方法は、それらのクローンをログに記録することです。 – pimvdb