我试图理解为什么需要将函数作为参数传递才能用作回调函数。如果我只是直接在父函数中调用该函数,有什么区别?
http://jsfiddle.net/7Lsafchu/5/
function main(statement, callback) {
$("body").append("Statement: " + statement + "\n");
callback();
}
function anyFunction() {
$("body").append("<p>I'm writing to a wall</p>");
}
main("This is test 1",anyFunction);
function main2(statement, callback) {
$("body").append("Statement: " + statement);
anyFunction2();
}
function anyFunction2() {
$("body").append("<p>I'm writing to a wall Again</p>");
}
main2("This is test 2");
最佳答案
@Pointy 的评论是正确的。 Javascript 支持“一流函数”,这是一种奇特的说法,您可以将函数视为任何其他数据类型(例如 javascript 中的 string
或 number
)。请参阅https://stackoverflow.com/a/705184/2308858 .
这很强大,因为它意味着您的程序可以在运行时决定要运行哪个函数!您甚至可以确定函数在运行时执行的“环境”,这意味着您的函数可以使用全局变量,该变量在一个上下文中具有一个值,在一组不同的条件下具有另一个值。这称为闭包,并且功能非常强大。
顺便说一句,在您的示例中,最好通过函数参数传递 jQuery 上下文,而不是直接调用它。这样你的 anyFunction
函数就不会知道它的环境;它只是根据接收到的输入进行操作。
例如:
function main(statement, callback) {
$("body").append("Statement: " + statement + "\n");
callback( $("body") );
}
function anyFunction( jqueryDomElement ) {
jqueryDomElement.append("<p>I'm writing to a wall</p>");
}
main("This is test 1",anyFunction);
关于javascript - 将函数作为参数传递和调用函数之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25313392/