既然 不是 callback = function (it, _, arr) { ... }。 callback怎么传递参数给函数
时间: 2023-12-10 14:41:38 浏览: 41
callback可以通过以下两种方式传递参数给函数:
1. 使用闭包:在函数内部定义一个新的函数,该函数使用callback的参数,并返回callback的调用。例如:
```
function myFunc(callback) {
const param1 = 1;
const param2 = 2;
function innerFunc() {
callback(param1, param2);
}
innerFunc();
}
myFunc(function(a, b) {
console.log(a, b); // 输出 1 2
});
```
2. 使用call或apply方法:将callback作为函数的参数传递,并使用call或apply方法传递需要的参数。例如:
```
function myFunc(callback) {
const param1 = 1;
const param2 = 2;
callback.call(null, param1, param2);
}
myFunc(function(a, b) {
console.log(a, b); // 输出 1 2
});
```
这两种方式都可以将参数传递给callback函数。具体使用哪种方式取决于具体的场景和编码习惯。
相关问题
var arr = { map: function (callback) { callback(100, 0, [10, 20, 30]) } } arr.map(function (it, _, arr) { console.log(it) console.log(_) console.log(arr) }) 这段代码中 可以理解为 callback = function (it, _, arr) { console.log(it) console.log(_) console.log(arr) } 吗?
不完全正确。在这段代码中,`callback` 是一个参数,是一个函数,函数体是 `callback(100, 0, [10, 20, 30])`。在这个函数体中,`callback` 被调用,并传入了三个参数:`100`、`0`、`[10, 20, 30]`。这三个参数在这个函数体内分别被赋值给了 `it`、`_`、`arr` 这三个形参。所以可以理解为这个函数体实际上是:
```
function (it, _, arr) {
console.log(it)
console.log(_)
console.log(arr)
}
```
而不是 `callback = function (it, _, arr) { ... }`。
function getMchArr(){ const options = { hostname: 'localhost.manage.donotcall.com.cn', port: 80, path: '/ZhouBaoApi/GetConditionMch?start_time=20230522&end_time=20230528&avg_num=3000000', method: 'GET' }; var mch_arr = []; const req = http.request(options, (res) => { res.on('data', (chunk) => { var result = chunk.toString(); var result = JSON.parse(result); for (let i = 0; i < result.data.length; i++) { const item = result.data[i]; mch_arr.push(item.mch_id) console.log(1111) } }); }); req.on('error', (error) => { console.error(error); }); req.end(); console.log(222) return mch_arr; }1111还没打印出来就打印了222,怎么让他顺序执行
要让这段代码按照顺序执行,可以将返回 `mch_arr` 的操作放到请求响应的回调函数中,这样就可以等到请求返回后再返回 `mch_arr`。例如,可以将代码改为:
```
function getMchArr(callback) {
const options = {
hostname: 'localhost.manage.donotcall.com.cn',
port: 80,
path: '/ZhouBaoApi/GetConditionMch?start_time=20230522&end_time=20230528&avg_num=3000000',
method: 'GET'
};
var mch_arr = [];
const req = http.request(options, (res) => {
res.on('data', (chunk) => {
var result = chunk.toString();
var result = JSON.parse(result);
for (let i = 0; i < result.data.length; i++) {
const item = result.data[i];
mch_arr.push(item.mch_id)
console.log(1111)
}
callback(mch_arr); // 在请求回调函数中返回 mch_arr
});
});
req.on('error', (error) => {
console.error(error);
});
req.end();
}
getMchArr((mch_arr) => { // 调用 getMchArr 并在回调函数中处理返回的 mch_arr
console.log(mch_arr);
});
```
这样,当调用 `getMchArr` 时,它会发起一个 HTTP GET 请求,请求返回后会执行回调函数,并将 `mch_arr` 作为参数传入。在回调函数中,可以对 `mch_arr` 进行处理,例如打印出来。