虽然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
。我怎样才能重新定义一个函数,但仍然像原error
一样传递function(error){...}
?
我尝试了各种各样的方法,但它不会为我做好准备。
提前致谢!
答案 0 :(得分:1)
请勿拨打此功能:
new Magister(chosenSchool, username, password).ready(checkLogin);
ready
需要一个函数对象,因此您必须自己传递chechLogin
而不是调用它并传递其返回值(可能是undefined
)。
我怎样才能重新定义一个函数,但仍然像原
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);
好多了。