哪个函数改变一个变量

Which function changes a variable

我有一个变量 foo,它的值会不时变化。我的代码很大, 所以不知道哪里改了

我想知道是否有可能知道 foo 的值在哪里被操纵。我不在乎我是否可以通过 chrome 调试器或通过 javascript 代码解决它。

有可能做到这一点吗?

您可以将 object.observe 直接添加到 chrome 开发工具中,以便在您的 属性 更改时获得控制台消息。看看这个:How to "break on property change" in chrome?

寻找使用object.observe

的答案

正如@ChadMcGrath 指出的那样,Object.observe 可能是您想要的,但还有一些其他选项可用,例如,如果变量是对象上的 属性,您可以定义 setter 为它:

var o = {};
Object.defineProperty(o, "myProperty",{ 
  set: function (x) {
    console.log("Set myProperty to", x);
    console.trace();
    this.value = x; 
  },
  get: function () {
    return this.value;
  },
});

对于 ECMAScript 2015,您可以使用 Proxy,但这在大多数浏览器中尚不可用:

var handler = {
    set: function(target, name, value, receiver){
        console.log("Set", name, "to", value);
        console.trace();
        target[name] = value;
    }
};

var o = new Proxy({}, handler);
o.myProperty = 1; //Will console log and give you a trace.

当你声明foo时,你可以这样做:

Object.defineProperty(window, "foo", { 
    set: function (x) { this.value = x; console.trace() }, 
    get: function() { return this.value; }
});

然后,只要设置 foo,它就会 运行 console.trace()