How exactly callbacks get their arguments?

2019-03-04 13:32发布

I have trouble understanding how callbacks in JavaScript get their arguments. Or in other words: how to implement a higher-order function so its callback accepts for instance a standard err and data arguments.

Like in this article on asynchronous JavaScript in the example of a callback used in a usual way (and I know it's usual because I see exactly this pattern used in Node.js moongose (i.e. for creating data in db)):

function getData(options, callback) { 
    $.get("example.php", options, function(response) { 
        callback(null, JSON.parse(response)); 
    }, function() { 
        callback(new Error("AJAX request failed!")); 
    }); 
} 

// usage 
getData({name: "John"}, function(err, data) { 
    if(err) { 
        console.log("Error! " + err.toString()) 
    } else { 
        console.log(data); 
    } 
});

how exactly the callback gets arguments err & data based on how getData() function is declared above?

1条回答
霸刀☆藐视天下
2楼-- · 2019-03-04 14:00

Arguments are passed to a function when that function is called.

function foo(arg) {
    console.log(arg);
}

foo("This is the value");

This is still true when it is a callback function.

function foo(arg) {
    console.log(arg);
}

function bar(callback) {
    callback("This is the value");
}

bar(foo);

And it is still true when the callback function is called by code written by someone else that exists in a library you aren't examining the source code of.

查看更多
登录 后发表回答