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

标签 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:错误未定义。如何才能不重新定义函数,但仍像原始 function(error){...} 一样传递 error
我尝试了各种方法,但都没有效果。

提前致谢!

最佳答案

只是不要调用该函数:

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

ready 需要一个函数对象,因此您必须传递 chechLogin 本身,而不是调用它并传递其返回值(这可能是 undefined) >).

How can I not redefine a function, but still passing the error as in the original function(error){...} ?

也许这就是困惑所在。实际上,您根本没有传递 error 。参数由调用者传递,该调用者已准备就绪

<小时/>

JavaScript 的一个很好的功能是您可以简单地将变量替换为其值的文字表示形式(在大多数情况下)。

所以如果我们看看

new Magister(...).ready(checkLogin(error));

并将 checkLogin 替换为它的值(函数)

new Magister(...).ready(function checkLogin(error){...}(error));

但是,这看起来根本不像第一个版本!突然,我们的函数定义末尾出现了一个狂野的(错误)

让我们反过来:

new Magister(...).ready(function(error){...});
// becomes
new Magister(...).ready(function checkError(error){...});
// becomes
function checkError(error) { ... }
new Magister(...).ready(checkError);

好多了。

关于Javascript - 用函数替换回调,包括参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28591827/

相关文章:

javascript - 图像在轮播中组合

javascript - 为什么不能将文档方法保存在函数中?

VBA:将函数参数限制为仅选定的值?

c++ - 从参数包创建不同的参数包

javascript - Webpack 无法呈现快速导入

Javascript:在子对象属性中访问父对象的属性

javascript - 只需使用一次 console.log 函数

php - PHP 中的 date() 函数

javascript - 在 React 中使用 map() 传递附加参数

javascript - 使用javascript ajax发送数组