当使用setTimeout调用时,Javascript文本将丢失其变量

当使用setTimeout调用时,Javascript文本将丢失其变量,javascript,variables,settimeout,Javascript,Variables,Settimeout,我有这段代码,但它没有像我预期的那样工作(它是演示代码,从一个更大的程序中提炼出来): 试验 var测试={ 变量:对, go:function(){ 警报(this.variable); } }; 函数s(){ test.go(); 设置超时(test.go,500); } 当我在IE和FF(我唯一关心atm的浏览器)中单击Go按钮时,第一个警告框显示“true”,第二个警告框显示“undefined” 我的问题是为什么,以及如何避免它?当您在超时后调用“go”时,“this”似乎指向其他

我有这段代码,但它没有像我预期的那样工作(它是演示代码,从一个更大的程序中提炼出来):


试验
var测试={
变量:对,
go:function(){
警报(this.variable);
}
};
函数s(){
test.go();
设置超时(test.go,500);
}
当我在IE和FF(我唯一关心atm的浏览器)中单击Go按钮时,第一个警告框显示“true”,第二个警告框显示“undefined”

我的问题是为什么,以及如何避免它?

当您在超时后调用“go”时,“this”似乎指向其他内容。它可能指向窗户

试试这样的

var fn = function(){
    test.go.apply(test, []);
}
setTimetout(fn, 500);
换线

setTimeout(test.go, 500);


脚本应该可以正常工作。

setTimeout
将在窗口上下文中执行传递的函数,因此“this”指的是窗口。请尝试以下方法:

setTimeout(function(){
    test.go();
}, 500);

谢谢,你的答案是第一个,但是其他的都比较短,所以我接受了其中一个。
setTimeout(function(){test.go()}, 500);
setTimeout(function(){
    test.go();
}, 500);