急!javascript中如何写关于判断一个变量发生是否改变?

变量a在定时无限循环(每一秒刷新一次)刷新中,如何将后一秒获取的值(string型)与前一秒获取的值(string型)判断是否相等?... 变量a在定时无限循环(每一秒刷新一次)刷新中,如何将后一秒获取的值(string型)与前一秒获取的值(string型)判断是否相等? 展开
 我来答
dualmind
2012-04-09 · TA获得超过270个赞
知道小有建树答主
回答量:237
采纳率:0%
帮助的人:176万
展开全部
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
左手编码
推荐于2018-03-28 · TA获得超过756个赞
知道小有建树答主
回答量:421
采纳率:0%
帮助的人:351万
展开全部
找一个全局变量存放a上一次改变前的值,等a改变后(可能),再比较两个变量
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
guoflysky
2012-04-09 · TA获得超过125个赞
知道答主
回答量:184
采纳率:100%
帮助的人:69.1万
展开全部
var tmpA = "";
var tmpB = tmpA;
function autoRefurbish(){
tmpB = tmpA;
//处理你需要处理的业务,如果tmpA 重新设值了
if(tmpB != tmpA){
//值已发生改变。
}
}
setTimeout("autoRefurbish()",1000); //每秒刷一次
//=========================================================================
//代码会因情况而定,希望对你有帮助!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tobeway
2012-04-09
知道答主
回答量:23
采纳率:0%
帮助的人:10万
展开全部
javascript循环体内的变量是不会丢失的。
你直接用一个变量存取上一次的值,和当前变量对比就可以了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式