簡體   English   中英

Javascript-用函數(包括參數)替換回調

[英]Javascript - Replace callback with function, including parameters

盡管Stackexchange Meta禁止我以“嗨”開頭,但我認為友好並不會對您造成實質性傷害。

嗨,

我使用以下代碼,

while (!success) {
    new Magister(chosenSchool, username, password).ready(function(error){
        /* Code here using the error variable above */
    });
}

但是JSLint警告我,在循環內定義函數將是一種不好的做法。
但是,使用以下代碼也不起作用。

function checkLogin(error) {
    /* Code here using the error variable above */
}
while (!success) {
    new Magister(chosenSchool, username, password).ready(checkLogin(error));
}

這導致Uncaught ReferenceError: error is not defined 如何不重新定義函數,但仍像原始function(error){...}一樣傳遞error function(error){...}
我嘗試了各種方法,但對我來說不會讓步。

提前致謝!

只是不要調用該函數:

new Magister(chosenSchool, username, password).ready(checkLogin);

ready需要一個函數對象,因此您必須傳遞chechLogin本身而不是調用它並傳遞其返回值(可能是undefined )。

如何不重新定義函數,但仍像原始function(error){...}一樣傳遞error function(error){...}

也許這就是混亂所在。 您實際上根本沒有傳遞error 該參數由已ready 調用方傳遞。


JavaScript的一個不錯的功能是,您可以用變量的值的文字表示形式簡單地替換變量(在大多數情況下)。

所以如果我們看

new Magister(...).ready(checkLogin(error));

並用它的值(函數)替換checkLogin

new Magister(...).ready(function checkLogin(error){...}(error));

但是,這根本不像第一個版本! 突然在我們的函數定義的末尾出現了一個野(error)

讓我們走相反的方向:

new Magister(...).ready(function(error){...});
// becomes
new Magister(...).ready(function checkError(error){...});
// becomes
function checkError(error) { ... }
new Magister(...).ready(checkError);

好多了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM