小编Sam*_*kiy的帖子

调试:是否可以实时看到JS变量的值?

是否有任何工具(最好是任何浏览器的扩展/附加组件)可以让您实时查看所需 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 控制台中完成,但我不知道如何做。

javascript debugging firefox firebug google-chrome

5
推荐指数
1
解决办法
1万
查看次数

JS:变量声明后的分号

我偶然发现了一个非常有趣的问题,这很难找到.自发现以来,并不难解决,但我想找到解释,以便将来不再重复类似的事情.这是我的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/

javascript

3
推荐指数
1
解决办法
1137
查看次数

标签 统计

javascript ×2

debugging ×1

firebug ×1

firefox ×1

google-chrome ×1