Javascript - 用函数替换回调,包括参数

Javascript - Replace callback with function, including parameters

虽然 Stackexchange Meta 禁止我从 "Hi," 开始,但我认为友好并没有实质性的伤害。

嗨,

我使用下面的一段代码,

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
各种方法都试过了,都不行。

提前致谢!

只是不要调用函数:

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

ready 需要一个函数对象,因此您必须传递 chechLogin 本身而不是调用它并传递它的 return 值(可能是 undefined)。

How can I not redefine a function, but still passing the error as in the original function(error){...} ?

也许这就是困惑所在。您实际上根本没有通过 error。参数由 caller 传递,即 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);

好多了。