何时/为何在回调函数中使用“return”

时间:2015-12-07 22:53:52

标签: javascript callback

我想知道我们应该何时使用return,何时不应该使用。

下面使用的return对我来说很困惑。请参阅我的问题的评论:

function each(collection, iterator) {
    if (Array.isArray(collection)){
      for (var i=0;i<collection.length;i++){
        iterator(collection[i],i,collection)
      }
    }else {
      for (var key in collection){
        iterator(collection[key],key,collection)
      }
    }
  };


function map(collection, iterator) {
    var result = [];

    // why we don't add "return" in front of the each() function here? 
    // why, if I add return, is the result "undefined"? 
    each(collection,function(value,key,collection){   

      result.push(iterator(value,key,collection));
    })
    return result;
  };

  function pluck(collection, key) {
    // Why do we add "return" in front of map function, and 
    // why if I don't add it, the result is "undefined"?     
    return map(collection, function(item){  
      return item[key];
    });
  };

var car = [{type: "Fiat", model: "500", color: "white"}]    

console.log(pluck(car,'type'));

2 个答案:

答案 0 :(得分:1)

使用return让您的函数返回一个值;如果该功能不需要返回任何内容,或者您​​不想返回 ,请不要使用它。

在你的例子中,如果你刚才说:

function pluck(collection, key) {
  map(collection, function(item){  
    return item[key];
  });
};

map()仍会被调用,但map()的结果将被丢弃。

好像你写的那样:

function add(a, b) {
  var c = a + b;           // computed, not returned
}

var result = add(1, 2);    // undefined

而不是:

function add(a, b) {
  var c = a + b;           // computed
  return c;                // and returned
}

var result = add(1, 2);    // 3

each()循环遍历一组事物,每次都执行一次操作。它没有结果返回。

在您的情况下,在each()之后还有更多代码 - 请记住,return; 结束它返回的函数。

// if we returned here
each(collection,function(value,key,collection){
  // this isn't part of each's "value", it's just some code
  // that runs within the each loop  
  result.push(iterator(value,key,collection));
})

// we'd never get here, to return the total result
return result;

答案 1 :(得分:1)

不完全确定您的问题是什么,但我猜您在比较eachmap / pluck的意义上each没有明确的return语句mappluck确实有明确的return语句。

需要注意的一点是,尽管each没有明确的return语句,但每个JavaScript函数都有一个隐式return undefined,而没有明确的return } statement - 表示each也有隐式return undefined

each没有return语句的原因是因为您不是要尝试返回任何内容 - 相反,您正在尝试对集合中的每个项目执行某些操作。对于mappluck,大多数库已对其进行了定义,以便指定这些函数来返回集合。