了解回调函数

时间:2017-10-15 12:05:28

标签: javascript

我遇到以下代码的问题:

var placeingOrders = function(orderNumber) {
    console.log("Order number: ", orderNumber);
    requestedOrder(orderNumber, returnOrder);
};

function requestedOrder(orderNumber, callback) {
    setTimeout(orderNumber, callback, 5000);
}

function returnOrder() {
    console.log("Order number: " ,  " is delivered");
}

我试图在回调函数上传递参数但是当我这样做时,我得到以下错误代码:

timers.js:348
    throw new TypeError('"callback" argument must be a function');
    ^

TypeError: "callback" argument must be a function
    at exports.setTimeout (timers.js:348:11)

当然,如果我在没有参数的情况下运行相同的代码,它将起作用。

var placeingOrders = function(orderNumber) {
    console.log("Order number: ", orderNumber);
    requestedOrder(returnOrder);
};

function requestedOrder(callback) {
    setTimeout(callback, 5000);
}

function returnOrder() {
    console.log("Order number: " , orderNumber , " is delivered");
}

我想知道我在这里做错了什么。如果我想传递参数,我如何正确使用此回调函数。

(ps:我不是英语母语人士,sry for the)

1 个答案:

答案 0 :(得分:4)

为什么会出现此错误?

setTimeout期望将回调函数作为第一个参数,但是在第一个位置传递一个数字,那么为什么会出现异常。第二种情况有效,因为您从第一个位置删除了orderNumber,该函数就可以获得它。

你需要在第二位之后传递回调函数的参数。请参阅https://justpaste.it/1cfen函数签名。首先是回调函数,第二个 - 时间,至少要调用函数,之后传递的所有内容都作为参数传递给回调函数。

这是函数的签名 - []是可选的。

setTimeout(function[, delay, param1, param2, ...])

代码

var placeingOrders = function(orderNumber) {
   console.log("Order number: ", orderNumber);
   requestedOrder(orderNumber, returnOrder);
};
    
function requestedOrder(orderNumber, callback) {
    setTimeout(callback, 5000, orderNumber);
}
    
function returnOrder(orderNumber) {
    console.log("Order number: " + orderNumber +  " is delivered");
}

placeingOrders(14);