如何将return语句发送给父函数?

时间:2017-02-11 12:07:50

标签: javascript for-loop return

不确定如何解释这个。我会用一个例子来试试。

例如,我使用以下函数作为数组上for循环的简写:

function forEach(array, f) {
  var len = array.length, i;
  for (i = 0; i < len; i += 1) {
    f(i, array[i], len);
  }
};

我想这并不常见。但是在函数中替换以下for循环时会导致问题:

function test(someArray) {
  for (var i = 0; i < someArray.length; i++) {
    if (someArray[i] === 23) {
      return true;
    }
  }
  return false;
}

替换:

function test(someArray) {
  forEach(someArray, function(i, value) {
    if (value === 23) {
      return true;
    }
  });
  return false;
}

当达到23并且返回test时不返回函数true但是继续执行forEach之后的语句并返回false

3 个答案:

答案 0 :(得分:1)

您的forEach()函数需要返回一个值。否则,在致电false后,您将始终返回forEach()

function forEach(array, f) {
  var len = array.length, i;
  for (i = 0; i < len; i += 1) {
    if (f(i, array[i], len)) {
        return true;
    }
  }
  return false;
};

function test(someArray) {
  return forEach(someArray, function(i, value) {
    return value == 23;
  });
}

答案 1 :(得分:1)

首先,请使用与数组API相同的样式进行回调。然后使用回调作为检查,并将决定留给调用函数以使用该信息。

在这种情况下,如果元素等于nil,则回调会查找数字并返回let image = UIImage() if testImage.texture?.cgImage() != nil{ image = UIImage(cgImage: (testImage.texture?.cgImage())!) } 。调用函数在接收true并返回23时停止迭代。否则迭代继续进行,如果没有找到,则返回值为true

true
false

对于不同的方法,比如返回一个值,我建议返回项而不是布尔值。如果找不到,请返回function forEach(array, f) { var len = array.length, i; for (i = 0; i < len; i ++) { if (f(array[i], i, array)) { return true; } } return false; } var cb = function (v) { console.log('value', v); return v === 23; }; console.log('result', forEach([1, 2, 3, 4, 5, 23, 6, 7], cb)); console.log('result', forEach([1, 2, 3, 4, 5, 6, 7, 33], cb));

.as-console-wrapper { max-height: 100% !important; top: 0; }
undefined

答案 2 :(得分:0)

有几种方法可以达到这种效果。这很简单:

function test(someArray) {
  var result = false

  forEach(someArray, function(i, value) {
    if (value == 23) result = true;
  });

  return result;
}

请注意,value应与==进行比较。一个=用于分配,它只是替换value

这里使用forEach的缺点是当value23 时,循环不会停止。它将完成所有项目的交互,即使23是列表中的第一项。使用for-return组合,只要找到23,迭代就会停止。

如果这让您感到担忧,那么a trick or two会停止forEach,但for-return方法更清晰。