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