繁体   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