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谢谢。延迟后传递的参数并不总是传递给回调,使用匿名自调用函数会更安全。并不总是传递给回调
-您能澄清一下吗?