2013-04-07 55 views
0

有一個問題,不知道我怎麼能給由ClickSimMove func(它返回具有2個值的數組)的ClickSimClick函數參數。setTimeout給函數參數從另一個函數

下面的代碼表示crd在setTimeout上未定義。

var crd = plugin().ClickSimMove(); 
setTimeout("plugin().ClickSimClick(crd[0], crd[1])", 1000); 
+0

這取決於您希望調用setTimeout時的crd [0]值還是超時時觸發的值。 – 2013-04-07 02:14:03

回答

2

傳遞一個函數,而不是一個字符串:

var crd = plugin().ClickSimMove(); 
setTimeout(function() { 
    plugin().ClickSimClick(crd[0], crd[1]); 
}, 1000); 

當你傳遞一個字符串,它的評價,因爲這將在全球範圍內eval,失去所有訪問本地變量。匿名函數允許您引用範圍內的任何變量。

1
var crd = plugin().ClickSimMove(); 
setTimeout(function(){ 
    plugin().ClickSimClick(crd[0], crd[1]); 
}, 1e3); 

如果可能的話,避免將字符串setTimeout/setInterval --use一個匿名函數來代替。特別是如果你發現自己連接變量來創建該字符串,那麼可以用某種注入或畸形的組件快速地運行以解決問題。

相關問題