因此,在我的js代码中,我有一些全局变量,例如,它会多次更改其值
var x = 0;
...
x = 10;
...
x = 5;
Run Code Online (Sandbox Code Playgroud)
是否有可能获得"历史" x而不将其价值保存在其他变量中?比如,是否有某些功能可以检测到某个时间点x等于10?
不,一旦为变量赋值,该变量的先前值就会被覆盖.它不会保留在任何地方.(如果是的话,那将是内存管理的噩梦.)
如果需要,可以使用setter函数创建一个保留历史记录的对象属性; 粗略的例子:
var obj = {
_fooValue: undefined,
fooHistory: [],
set foo(value) {
this.fooHistory.push(this._fooValue);
this._fooValue = value;
},
get foo() {
return this._fooValue;
}
};
obj.foo = 0;
obj.foo = 5;
obj.foo = 42;
console.log(obj.fooHistory);Run Code Online (Sandbox Code Playgroud)
在该示例中,历史记录不包含当前值,仅包含前一个值,并且它将当前值存储在另一个对象属性中,这意味着代码可以绕过setter.你可以做很多调整.如果您认为这很重要,可以将其锁定更多:
var obj = (function() {
// These two vars are entirely private to the object
var fooHistory = [];
var fooValue;
// The object we'll assign to `obj`
return {
set foo(value) {
fooHistory.push(fooValue);
fooValue = value;
},
get foo() {
return fooValue;
},
get fooHistory() {
// Being really defensive and returning
// a copy
return fooHistory.slice(0);
}
}
})();
obj.foo = 0;
obj.foo = 5;
obj.foo = 42;
console.log(obj.fooHistory);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
89 次 |
| 最近记录: |