函数内的嵌套返回

时间:2014-02-16 20:11:43

标签: javascript

以下是我想分析的代码:

function words(inputString) {
    var wordArray = inputString.match(/\w+/gi);
     return wordsObject(wordArray); // Why is return needed here if a return 
     // return is already in the last line of the wordsObject function below?
     // shouldn't that return the finalWordObj?

}

function wordsObject(wordArr){
    var finalWordObject = {};

    wordArr.forEach(function(item){
        item = item.toLowerCase();

        item in finalWordObject ? finalWordObject[item]++ : finalWordObject[item] = 1;
    });
    return finalWordObject;
}

如果你看看我在第3行的评论,我必须使用return wordsObject(wordArray)。我想知道为什么我必须使用return因为在函数wordsObject(wordArr)中我返回它创建的对象(finalWordObject)。为什么return函数运行时wordsObject不会结转?

2 个答案:

答案 0 :(得分:2)

对函数的调用是对函数的请求"做它的事情"。函数可能会也可能不会返回值,但如果它们存在,则该值在调用环境中可用。

在不注意返回值的情况下调用函数:

wordsObject( wordArray );

导致函数运行,并且返回值被丢弃。它有点像执行计算而不将结果赋给变量:

15 * 3;

函数的返回值在其出现的表达式中可用作术语:

var x = Math.sin( angle );

这是对函数的调用,返回的值存储在变量" x"。

return语句后面可以跟一个表达式。意思是表达式应该被计算,然后封闭函数应该以表达式的值作为其调用的返回值在它自己的调用上下文中终止。

因此,为了使函数返回对另一个函数的调用值,您需要在return语句的右侧进行该函数调用:

return wordsObject( wordArray );

某些编程语言将函数的最后一个表达式视为特殊,并隐式将其用作返回值。 JavaScript 其中一种语言。

答案 1 :(得分:1)

当您致电words()时,会返回您致电wordsObject时返回的内容。简单地调用该函数只会执行函数,给出输出。 return使该函数给出另一个函数的输出。例如:

function b() {
    return 1+1;
}
function a() {
    return b();
}

console.log( a() );

将记录2