[英]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.