沒有辦法,調用比undefined
其他cap_check
將時刻警惕任何東西。一個函數不是一個靜態對象。當你調用一個函數時,它會在內部堆棧上創建一個新實例。 row
將被初始化爲undefined
,並且新的點擊處理程序將被綁定到td
元素(也不太可能有用 - 因爲每次調用cap_check
時都會綁定另一個重複事件處理程序)。
最有可能的,你想是這樣的:
var cap_check=(function() {
var row;
$('td').change(function(){
row = $(this).parent().parent().children().index($(this).parent());
alert(row);
});
return function() {
alert(row);
};
}());
這是一個自動執行的功能。當腳本運行時,「返回」之前的函數部分立即執行,創建事件綁定一次,並返回一個引用原始函數實例的函數。這將創建一個關閉,這意味着該函數會維護對其父對象(在此例中爲row
變量)的引用。因此,您的事件處理函數和函數cap_check
現在將始終引用row
的相同實例。
所以 - 現在任何調用cap_check
的代碼將始終返回與change
事件結果相同的值。
小提琴:
http://jsfiddle.net/RagUe/5/
(請注意,我改變了「點擊」,而不是「變」事件,使其容易測試)。
你能否請包括與此代碼 – mcgrailm 2011-06-07 14:59:47
去看看這篇文章的HTML。這是相同的。 http://stackoverflow.com/questions/2611980/return-value-from-nested-function-in-javascript – JAiro 2011-06-07 14:59:37
@JAiro:不,它不一樣。 – 2011-06-07 15:03:29