2013-07-05 89 views
1

我需要分配window.setTimeout來動態地進行全局變量或對象,是這樣的:如何將window.setTimeout賦值給動態變量?

$n = 1 
var variable[$n] = window.setTimeout(function() { /*somecode*/ },2000) 

這是行不通的。
也不能正常工作:

var eval(variable+$n) = window.setTimeout(function() { /*somecode*/ },2000) 

但作品,未經「變種」,但我需要全局變量,所以我需要用「變種」的範圍。

有什麼可能的解決方案?

+0

1.什麼是錯誤? 2.如果你放棄var statment,它的未定義它變成全球 – VeXii

+1

我認爲錯誤是'variable'不是數組 – iConnor

回答

1

可以實現,像這樣

variable = []; 

variable[1] = window.setTimeout(function() { alert('hi') }, 2000); 

// This will alert 'hi' in 2 seconds 

,或者如果你希望能夠調用setTimeoutfunction你可以做到這一點

variable = []; 

variable[1] = function(){ window.setTimeout(function() { alert('hi') },2000) }; 

// This won't alert 'hi' until you do this 

variable[1](); 

您遇到的問題是,variable不是array所以如果你想要做你的方式,你將有要先製作variable一個這樣的array,還有全球?只要刪除var

$n = 1 
variable = []; 
variable[$n] = window.setTimeout(function() { alert('hi') },2000); 
+0

thx,exat我需要 –

0

要解決全局變量問題,請不要使用var。使用var重新定義該範圍中的變量。

讓我給你一個不同的例子來說明:

var i = 2; 

function show() { 
    alert(i); // This will show 2 
} 

但在這個例子中:

var i = 2; 

function show() { 
    var i = 4; //This defines a local variable called "i" to be used inside function only 
    alert(i); // Will show 4; 
} 
alert(i); // But this will still show 2 

因此,使用它沒有var

$n = 1 
variable[$n] = window.setTimeout(function() { /*somecode*/ },2000) 
0

如果沒有把握你想引用setTimeout或用代碼執行setTimeout,也許這會給你一個想法:

window.myvar = function(){window.setTimeout(function() { alert("hi"); },2000)}; 
myvar();// will alert hi after 2 seconds 

如果你需要傳遞一個變量:

window.myvar = function(message){ 
    window.setTimeout(function() { alert(message); },2000) 
}; 
myvar("bye");// will alert bye after 2 seconds 

的setTimeout是一個函數,並返回一個數字,你可以用這個數字來取消超時,下面將不會警告任何東西,因爲我取消:

var timeoutHandle=setTimeout(function(){alert("hi");},5000); 
// next line cancels the timeout 
clearTimeout(timeoutHandle);