- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
以下功能由“Doug Crockford: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
一些想法?
最佳答案
这是 Chrome 控制台输出的问题。 Chrome 似乎以某种方式动态更新输出以反射(reflect)数组的内容。如果你在 Firebug 中运行它,输出是:
[0, 1] 3 undefined
[0, 1] 2 undefined
[0, 1] 1 1
[0, 1] 0 0
[0, 1, 1] 1 1
2
当您尝试在脑海中浏览代码时,这也很有意义:console.debug
是 fib
中的第一条语句。第一次调用 fib
时,memo
是 [0, 1]
因为数组没有做任何更改。 c
是 3
,所以你得到 undefined
。因此在第一次调用时,无论控制台显示什么,memo
都不能是[0, 1, 1, 2]
。
一些 JavaScript 控制台 seem to show such a behaviour (以一种或另一种方式),当您记录对数组或对象的引用时。在这些情况下,设置断点并逐步检查代码通常会更好。
更新:似乎 Firebug 修复了这个问题(如果它曾经存在过),但它似乎仍然存在于 Firebug light 中。
关于javascript - Javascript函数的明显矛盾行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7377853/
通常当我请求线程转储时,系统性能不佳的症状很容易解释;也就是说,通常我会看到许多线程显然正在等待一个已被获取但未被另一个释放的监视器。 在这种情况下,我有很多线程在等待监视器 (0x965ad100)
C:\Users\shagy\Desktop\3RD YEAR 2ND SEMESTER\SPM\Newfolder\SPM-SMS>npm start npm ERR! path C:\Users\
我是一名优秀的程序员,十分优秀!