javascript中的回调(参数传递

问题描述 投票:1回答:1

我在理解javascript中回调的规则时遇到了麻烦。我知道回调在函数x完成后运行,但是我发现在定义它们的时候有歧义。

在node.js的文档中。https:/nodejs.orgenknowledgegetting-startedcontrol-flowwhat-are-callbacks。

代码

function processData () {
  var data = fetchData ();
  data += 1;
  return data;
}

改为

function processData (callback) {
  fetchData(function (err, data) {
    if (err) {
      console.log("An error has occurred. Abort everything!");
      return callback(err);
    }
    data += 1;
    callback(data);
  });
}

当创建匿名函数时,为什么我们可以使用参数,这些参数从哪里来,这些参数的规则是什么?

这个问题的背景来自于socket.io库具体来说。

var io = socket(server);
io.on('connection', function(socket){}

为什么我们可以引用socket,我可以直接在function(random_param, socket)中添加吗?传递random_param的时候怎么告诉函数要引用?

有人告诉我读文档,我已经读过了,但这并没有让事情变得更清楚。

先谢谢你。

javascript node.js function callback parameter-passing
1个回答
3
投票

我知道回调是在函数x完成后运行的。

不一定。JavaScript标准库(和其他各种库)有很多非异步回调。想想数组函数的回调吧 forEach, map, sort...

...当匿名函数被创建时,为什么我们可以使用参数,这些参数从哪里来,这些参数的规则是什么?

它们来自于调用回调的代码。在你的例子中,你使用的socket.io库中的代码调用回调时有两个参数,你的回调在参数中接收到了 errdata.

这里有一个有点傻的例子。一个函数调用一个随机数的回调。

// This is analogous to the code in the socket.io library
function getARandomNumberWithRandomDelay(callback) {
    setTimeout(() => {
        callback(Math.random());
    }, Math.random() * 1000);
}

// This is analogous to your code using the socket.io library
getARandomNumberWithRandomDelay(function(num) {
    console.log("I got the number " + num);
});
© www.soinside.com 2019 - 2024. All rights reserved.