尽管 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:错误未定义
。如何才能不重新定义函数,但仍像原始 function(error){...}
一样传递 error
?
我尝试了各种方法,但都没有效果。
提前致谢!
最佳答案
只是不要调用该函数:
new Magister(chosenSchool, username, password).ready(checkLogin);
ready
需要一个函数对象,因此您必须传递 chechLogin
本身,而不是调用它并传递其返回值(这可能是 undefined
) >).
How can I not redefine a function, but still passing the
error
as in the originalfunction(error){...}
?
也许这就是困惑所在。实际上,您根本没有传递 error
。参数由调用者传递,该调用者已准备就绪
。
JavaScript 的一个很好的功能是您可以简单地将变量替换为其值的文字表示形式(在大多数情况下)。
所以如果我们看看
new Magister(...).ready(checkLogin(error));
并将 checkLogin
替换为它的值(函数)
new Magister(...).ready(function checkLogin(error){...}(error));
但是,这看起来根本不像第一个版本!突然,我们的函数定义末尾出现了一个狂野的(错误)
。
让我们反过来:
new Magister(...).ready(function(error){...});
// becomes
new Magister(...).ready(function checkError(error){...});
// becomes
function checkError(error) { ... }
new Magister(...).ready(checkError);
好多了。
关于Javascript - 用函数替换回调,包括参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28591827/