我想知道我们应该何时使用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'));
答案 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)
不完全确定您的问题是什么,但我猜您在比较each
与map
/ pluck
的意义上each
没有明确的return
语句map
和pluck
确实有明确的return
语句。
需要注意的一点是,尽管each
没有明确的return
语句,但每个JavaScript函数都有一个隐式return undefined
,而没有明确的return
} statement - 表示each
也有隐式return undefined
。
each
没有return
语句的原因是因为您不是要尝试返回任何内容 - 相反,您正在尝试对集合中的每个项目执行某些操作。对于map
和pluck
,大多数库已对其进行了定义,以便指定这些函数来返回集合。