编辑:我最终想要使用setTimeout在以后恢复变量的先前值
我创建了以下示例来说明我的观点:(JSFiddle)
<!DOCTYPE html>
<html>
<body>
<p>Push the button</p>
<button id = "push">Try it</button>
<script>
var x = {};
x.boo = "foo";
function myFunction() {
alert(x.boo);
}
document.getElementById('push').addEventListener('click',function() {
setTimeout(function() {
myFunction(x)
}, 1000);
x.boo = 'baz'; //eg. something else modifies x before first timer runs out
// another timer gets created, should reflect new value in x
// added delay is just to keep track of the order myFunction is being executed
setTimeout(function() {
myFunction(x)
}, 3000);
},false);
</script>
</body>
</html>
单击按钮后,alert()窗口在1秒后显示'baz',然后在3秒后显示'baz'。
单击按钮后,警报窗口应显示'foo',然后在3秒后显示'baz'。
我已经尝试将myFunction回调包装在另一个发送到setTimeout的匿名函数中,并尝试传入params代替,两者都不会改变行为。
在我的应用程序中,jQuery库已加载,因此如果需要,我也可以使用它。
答案 0 :(得分:3)
你有没有试过这样的事情:
var x = {};
x.boo = "foo";
function myFunction(x2) {
alert(JSON.stringify(x2));
}
$('#push').on('click', function() {
// Deep copy
var newObject = jQuery.extend(true, {}, x);
setTimeout(function() { myFunction(newObject); }, 1000);
x.boo='baz';
setTimeout(function() { myFunction(x); }, 3000);
});
更新了这种方法:
答案 1 :(得分:0)
我不知道你想要它或者只是看看它。首先点击它会显示一个警告foo然后在3秒之后它将显示baz alert.have看看这段代码
<!DOCTYPE html>
<html>
<body>
<p>Push the button</p>
<button onclick="myFunction();x.boo='baz';setTimeout(myFunction, 3000,x);">Try it</button>
<script>
var x = {};
x.boo = "foo";
function myFunction() {
alert(x.boo);
}
</script>
</body>
</html>
答案 2 :(得分:-1)
更改您的代码:
<!DOCTYPE html>
<html>
<body>
<p>Push the button</p>
<button onclick="setTimeout(myFunction, 1000);setTimeout(myFunction, 3000);">Try it</button>
<script>
var x = {};
x.boo = "foo";
function myFunction() {
alert(x.boo);
x.boo = "baz";
}
</script>
</body>
</html>