Javascript 理解回调函数

Javascript 理解回调函数,javascript,Javascript,我对以下代码有问题: var placeingOrders = function(orderNumber) { console.log("Order number: ", orderNumber); requestedOrder(orderNumber, returnOrder); }; function requestedOrder(orderNumber, callback) { setTimeout(orderNumber, callback, 5000); }

我对以下代码有问题:

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");
}
我想知道我到底做错了什么。如果要传递参数,如何正确使用此回调函数


(注:我不是以英语为母语的人,请原谅)

为什么会出现这个错误?

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

您需要在第二位之后传递回调函数的参数。请参见函数签名。首先是回调函数,第二个是时间,至少是调用函数的时间,之后传递的所有内容都作为参数传递给回调函数

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

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

var placeingOrders=函数(orderNumber){
日志(“订单号:”,订单号);
请求订单(订单号、退货订单);
};
函数requestedOrder(orderNumber,回调){
setTimeout(回调,5000,订单号);
}
函数returnOrder(orderNumber){
console.log(“订单号:+orderNumber+”已交付”);
}

定单(14)为什么会出现此错误?

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

您需要在第二位之后传递回调函数的参数。请参见函数签名。首先是回调函数,第二个是时间,至少是调用函数的时间,之后传递的所有内容都作为参数传递给回调函数

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

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

var placeingOrders=函数(orderNumber){
日志(“订单号:”,订单号);
请求订单(订单号、退货订单);
};
函数requestedOrder(orderNumber,回调){
setTimeout(回调,5000,订单号);
}
函数returnOrder(orderNumber){
console.log(“订单号:+orderNumber+”已交付”);
}

定单(14)请求订单(订单号、退货订单);未定义returnOrder,并且未将其设置为调用函数requestedOrderrequestedOrder(orderNumber,returnOrder);returnOrder没有定义,您没有将其设置为调用函数requestedOrder,您还需要给
returnOrder
一个参数并实际使用它somewhere@Bergi谢谢。延迟后传递的参数并不总是传递给回调,使用匿名自调用函数会更安全
并不总是传递给回调
-您能澄清一下吗?您还需要给
returnOrder
一个参数并实际使用它somewhere@Bergi谢谢。延迟后传递的参数并不总是传递给回调,使用匿名自调用函数会更安全。
并不总是传递给回调
-您能澄清一下吗?