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

Javascript - Replace callback with function, including parameters

本文关键字:替换 回调 参数 包括 函数 Javascript-      更新时间:2024-01-31

尽管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));
}

这导致CCD_ 1。我怎么能不重新定义一个函数,但仍然像原来的function(error){...}一样传递error
我尝试了各种方法,但对我来说都不会改变

提前感谢!

只是不要调用函数:

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

ready需要一个函数对象,所以必须传递chechLogin本身,而不是调用它并传递它的返回值(很可能是undefined)。

我怎么能不重新定义一个函数,但仍然像原来的function(error){...}一样传递error呢?

也许这就是困惑所在。实际上,你根本没有通过error。参数由调用方传递,调用方为Uncaught ReferenceError: error is not defined0。


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);

好多了。