2011-06-14 34 views
1

我正在清理一些腳本錯誤,並有一個微妙的困境。Javascript - 傳遞一個參數作爲參數

考慮這行代碼:

Session.Timer = window.setTimeout("TimeoutHandler(Session)", 1000); 

這是行不通的,因爲當超時試圖執行TimeoutHandler(Session)也不會知道Session變量是什麼(超出範圍)。

有沒有辦法讓Session「價值」翻譯成所以它會被正確執行?

回答

6

使用閉包(使用匿名函數)而不是字符串,它將爲您保留對Session的引用。

Session.Timer = window.setTimeout(function() { TimeoutHandler(Session); }, 1000); 

如果你不熟悉閉包,這裏是brief introduction

+0

+1,但*閉包**或**匿名函數*使它聽起來像是同樣的事情。 – alex 2011-06-14 23:53:08

+0

@alex不能完全找到我喜歡的措辭,但對於基本目的而言,匿名函數和閉包足夠緊密。 – cobbal 2011-06-14 23:55:31

+0

當我快速閱讀文章時如此明顯:)我不知道他們保留了局部變量甚至是範圍。我學到了新東西!我甚至可以從頭開始實施我想到的第一個解決方案:D – 2011-06-15 00:26:49