为什么在没有提供数据参数的情况下引用此函数?

时间:2019-02-03 15:44:53

标签: javascript ecmascript-6

我不明白在不提供arg值的情况下如何调用带有arg的函数。我猜想由于PS5库中的loadStrings方法将进行异步调用,因此假设有返回的数据或消息,但是我仍然希望在函数调用中提供arg,因为函数定义需要一个arg。

试图在网上找到对此的解释,但到目前为止还不能。

这是所使用和起作用的。

function setup() {
  loadStrings("lines.txt", doText);
}

function doText(data) {
  for (var i=0; i<data.length; i++) {
    text(data[i], 5, 20*i+20);
  }
}

我认为要为doText调用提供一个参数,我必须将其包装在一个匿名函数中,以防止立即执行该操作,方法是在名称后添加打开的括号,然后在包装器内将其赋予arg

function setup() {
  loadStrings("lines.txt", function () {doText(data);});
}

function doText(data) {
  for (var i=0; i<data.length; i++) {
    text(data[i], 5, 20*i+20);
  }
}

那么在第一个示例中如何在没有提供实际arg值的情况下神奇地传递数据呢?

2 个答案:

答案 0 :(得分:1)

loadStrings似乎是一个函数,它期望第二个参数是一个函数,其中参数是处理第一个参数的结果。

例如

function loadStrings(a, f) {
  new Promise(function(resolve) {
    resolve(a)
  })
  .then(f)
}

function doText(data) {
  for (var i=0; i<data.length; i++) {
    console.log(data[i], 5, 20*i+20);
  }
}

loadStrings("text.txt", doText)

可以被认为与

相同

function loadStrings(a, f) {
  new Promise(function(resolve) {
    resolve(a)
  })
  .then(function(data) {
    f(data)
  })  
}

function doText(data) {
  for (var i=0; i<data.length; i++) {
    console.log(data[i], 5, 20*i+20);
  }
}

loadStrings("text.txt", doText)

另请参阅Are there differences between .then(functionReference) and .then(function(value){return functionReference(value)})?

答案 1 :(得分:1)

这里没有魔术。如您在docs中阅读或在code of p5.js中所见 loadString正在读取给定文本文件的行,并将结果数组作为第一个参数传递给回调函数。