javascript - 将函数作为参数传递和调用函数之间的区别

标签 javascript callback

我试图理解为什么需要将函数作为参数传递才能用作回调函数。如果我只是直接在父函数中调用该函数,有什么区别?

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 中的 stringnumber)。请参阅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/

相关文章:

javascript - Typings CLI 实用程序的命令,用于使 Typings 文件夹与 Typings.json 匹配

javascript - 替换字符(将 python 代码翻译为 JavaScript)

javascript - 通过异步回调函数传递不同版本的变量

Symfony2 ORM prePersist 不工作

php - .load() 循环将 html 内容放入容器中

javascript - Uncaught Error : [$injector:modulerr] Failed to instantiate module scheduleApp due to:

javascript - JS通过引用推送对象的原因是什么?

c - 对将用户数据传递到PortAudio回调感到困惑

javascript - 回调不是一个函数吗?

perl - 在 Perl 中,您如何动态选择要用作回调的方法?