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

时间:2014-08-14 16:49:02

标签: 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");

1 个答案:

答案 0 :(得分:1)

@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);