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

时间:2015-02-18 19:06:19

标签: javascript function parameters parameter-passing referenceerror

虽然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){...}? 我尝试了各种各样的方法,但它不会为我做好准备。

提前致谢!

1 个答案:

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

好多了。