急!javascript中如何写关于判断一个变量发生是否改变?
变量a在定时无限循环(每一秒刷新一次)刷新中,如何将后一秒获取的值(string型)与前一秒获取的值(string型)判断是否相等?...
变量a在定时无限循环(每一秒刷新一次)刷新中,如何将后一秒获取的值(string型)与前一秒获取的值(string型)判断是否相等?
展开
4个回答
展开全部
1. 每秒定时刷新, 那应该是使用setInterval实现的吧.
2. 关于一个值是否发生更改, 这个是不可能监控到的, 但我们可以确保某个变量一定不会被更改. 使用闭包机制, 实现类似实例对象私有成员的机制.
function closure(){
var a = ''; //使用闭包机制, 实现私有变量, 防止外部修改
return function(){
//假设每次都从某个html节点获取值检查差异
var _a = document.getElementById('html_node_id').value;
//如与之前一次相等则不做操作, 否则对其赋值.
if (_a === a) {
//相等
} else {
//不等
a = _a;
}
};
}
var tid = setInterval(closure(), 1000); //设定循环, 此处使用了字面量调用, 闭包方法引用只存在于setInterval方法内部上下文中, 所以其他何地方都不可能修改循环中的变量a. 知道调用clearInterval(tid)时, 闭包被GC回收. (注意, 不管什么时候setInterval的返回值都应该保留下来)
//闭包机制参考
function closure(){
var a = 0; //返回的方法中有对变量a的引用, 所以该变量不会被GC回收
return function(){
a++; //变量只能通过条用closure方法获得的方法引用调用才能修改
alert(a);
};
}
//每次调用function都会产生新的上下文, 所以c1和c2是两个独立的闭包, 闭包内资源也是互相独立的, 通过下面的返回值可以验证此点.
var c1 = closure(), c2 = closure();
c1(); //1
c2(); //1
c1(); //2
c1(); //3
c2(); //2
c2(); //3
var c3 = c1; //闭包方法引用可以被复制到其他变量;
c3(); //4
c1(); //5
2. 关于一个值是否发生更改, 这个是不可能监控到的, 但我们可以确保某个变量一定不会被更改. 使用闭包机制, 实现类似实例对象私有成员的机制.
function closure(){
var a = ''; //使用闭包机制, 实现私有变量, 防止外部修改
return function(){
//假设每次都从某个html节点获取值检查差异
var _a = document.getElementById('html_node_id').value;
//如与之前一次相等则不做操作, 否则对其赋值.
if (_a === a) {
//相等
} else {
//不等
a = _a;
}
};
}
var tid = setInterval(closure(), 1000); //设定循环, 此处使用了字面量调用, 闭包方法引用只存在于setInterval方法内部上下文中, 所以其他何地方都不可能修改循环中的变量a. 知道调用clearInterval(tid)时, 闭包被GC回收. (注意, 不管什么时候setInterval的返回值都应该保留下来)
//闭包机制参考
function closure(){
var a = 0; //返回的方法中有对变量a的引用, 所以该变量不会被GC回收
return function(){
a++; //变量只能通过条用closure方法获得的方法引用调用才能修改
alert(a);
};
}
//每次调用function都会产生新的上下文, 所以c1和c2是两个独立的闭包, 闭包内资源也是互相独立的, 通过下面的返回值可以验证此点.
var c1 = closure(), c2 = closure();
c1(); //1
c2(); //1
c1(); //2
c1(); //3
c2(); //2
c2(); //3
var c3 = c1; //闭包方法引用可以被复制到其他变量;
c3(); //4
c1(); //5
展开全部
var tmpA = "";
var tmpB = tmpA;
function autoRefurbish(){
tmpB = tmpA;
//处理你需要处理的业务,如果tmpA 重新设值了
if(tmpB != tmpA){
//值已发生改变。
}
}
setTimeout("autoRefurbish()",1000); //每秒刷一次
//=========================================================================
//代码会因情况而定,希望对你有帮助!
var tmpB = tmpA;
function autoRefurbish(){
tmpB = tmpA;
//处理你需要处理的业务,如果tmpA 重新设值了
if(tmpB != tmpA){
//值已发生改变。
}
}
setTimeout("autoRefurbish()",1000); //每秒刷一次
//=========================================================================
//代码会因情况而定,希望对你有帮助!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
javascript循环体内的变量是不会丢失的。
你直接用一个变量存取上一次的值,和当前变量对比就可以了。
你直接用一个变量存取上一次的值,和当前变量对比就可以了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询