是否有任何工具(最好是任何浏览器的扩展/附加组件)可以让您实时查看所需 JS 变量的所有值变化?
以前我做了这样的事情(用纯JS):
var someVariable;
var previousValueOfSomeVariable;
var f = function() {
if (previousValueOfSomeVariable != someVariable) {
console.log(Date.now(), someVariable);
previousValueOfSomeVariable = someVariable;
}
}
var TO = setInterval(f, 100);
Run Code Online (Sandbox Code Playgroud)
它做到了这一点,但当然效率低下(实际上该函数更大,而如果变量是一个对象,则需要对象复制函数并进一步检查)...
更新
我知道控制台工具,但我想查看更改的历史记录,例如:
someVariable
0 毫秒:undefined;
10 毫秒:5;
40 毫秒:'someothervalue';
150毫秒:null
ETC。
(给出的毫秒数仅供示例之用,不一定是必需的)。也许可以在 DevTools 控制台中完成,但我不知道如何做。
我偶然发现了一个非常有趣的问题,这很难找到.自发现以来,并不难解决,但我想找到解释,以便将来不再重复类似的事情.这是我的JS代码的简化版本:
//the following does not work:
var A = function(){
console.log('I am A')
}
(function B(){
console.log('I am B');
})()
A();
Run Code Online (Sandbox Code Playgroud)
我期待看到'我是B',然后'我是A'在控制台.但是,有 Uncaught TypeError:undefined不是函数
经过长时间的调试后我发现,A函数之后丢失的分号会导致问题:
//the following works as expected:
var A = function(){
console.log('I am A')
};
(function B(){
console.log('I am B');
})()
A();
Run Code Online (Sandbox Code Playgroud)
而且,当你以其他方式声明函数时,一切都会很好:
//this works too
function A(){
console.log('I am A')
}
(function B(){
console.log('I am B');
})()
A();
Run Code Online (Sandbox Code Playgroud)
因此,它是一个变量声明和括号的组合,可以破坏代码.
你能解释一下为什么会这样吗?
这是测试的小提琴:http: //jsfiddle.net/wxu2f8en/