2012-03-05 48 views
17

我在MSIE以下的javascript:的setTimeout的Internet Explorer

setTimeout(myFunction, 1000, param); 

這似乎在所有瀏覽器的工作,除了IE瀏覽器。該參數不會被轉發給該函數。看着調試器,它是未定義的。

+0

只需使用匿名函數... – 2012-03-05 14:40:21

回答

32

param在Internet Explorer中指定myFunction代碼是否是JScript中,JavaScript或VBScript還參見:MSDN。它不像其他瀏覽器。

下面的工作:

setTimeout(function() { 
    myFunction(param); 
}, 1000); 

前面的線並不完全模仿setTimeout在Firefox等。要通過更高版本的更新到param變量,利用傳遞變量,未受影響:

setTimeout((function(param) { 
    return function() { 
     myFunction(param); 
    }; 
})(param) , 1000); 
+0

感謝!哪個「params」是實際通過的那個? – clamp 2012-03-05 16:54:50

+0

@clamp底部的'param'是原始的'param'變量。頂部的「param」是自調用函數的局部變量。中間的'param'解析爲頂部的'param'。 – 2012-03-05 16:59:13

+0

謝謝!現在所有的瀏覽器似乎都能正常工作,只是一些後期處理工具(如jshint和google閉包編譯器)抱怨說這是無效的語法。但我想,這應該是另一個問題。 – clamp 2012-03-05 17:02:58

3

Internet Explorer不允許您傳遞那樣的參數。你必須從回調函數明確地做到這一點:

setTimeout(function(){ 
    myFunction(param); 
}, 1000); 

報價從MDN

注意,通過附加參數傳遞給函數在第一語法不上網工作資源管理器。

0

這不是一個參數。顯然,最後一個參數是表示腳本語言。

使用匿名函數:

setTimeout(function() { 
    myFunction(param); 
}, 1000); 
0

可以使用匿名函數:

setTimeout(function() { myFunction(param) }, 1000); 
0

如何:

setTimeout(function(){ 
    myFunction(param); 
}, 1000); 
0

您可以使用封閉:

setTimeout(function(){myFunction(param)}, 1000);