2012-05-22 89 views
13

我讀了,你可以通過做自動啓動JS負載功能很多地方:自動執行javascript函數並稍後調用它們?

$(function() { 
    // code... 
}); 

或者

var myFunc = function() { 
    // code... 
}(); 

我的問題是,你怎麼再打這些功能呢?因爲簡單的聲明

function myFunc() { 
    // code... 
} 

可以很容易地被召回但不會自動啓動。我必須在加載時手動調用它們,這很煩人,在代碼中佔用空間,如果我忘記了它,它可能是一個錯誤源。

如果你不明白我的解釋,這裏是一個例子:

我有一個「權重」,在我形成一個「高度」領域,我需要計算BMI(身體質量指數)。 當頁面加載時,重量和高度由數據庫填充,然後在一切就緒時啓動計算。 但是後來,如果用戶改變體重或身高,BMI必須立即重新計算。什麼是最好的方式來做到這一點?使用jQuery或純JS,我不介意。

謝謝。

回答

22

A reusable immediate function

var reference = (function thename(){ 

    //function body 

    return thename; //return the function itself to reference 

}()); //auto-run 


reference(); //call it again 
reference(); //and again 

請注意,調用該函數返回到剛纔所調用的函數的引用。

var anotherReference = reference(); //anotherReference === reference 
+1

reference(); // 然後再次! –

+0

正是我在找什麼,謝謝! – Willy

+0

「參考」和「名稱」是否相同,這有什麼關係嗎? – Willy

-2

此代碼:

var myFunc = function() { 
     // code... 
    }(); 

不會在文件準備執行時,它會執行瀏覽器解析該文件的時刻。現在,如果這仍然是確定和你在一起,你可以再次調用這個函數做:

myFunc(); 

這麼簡單....

這是否幫助?

+0

DOM加載後我解析了文件(我把聲明放在HTML代碼的末尾)。但是當我這樣做時,我得到了「myFunc()不是函數」。 – Willy

+0

你說得對,我的回答是不正確的。 「myFunc」實際上包含匿名函數的返回值。 – Deleteman

相關問題