函数内部的return语句有什么用?

时间:2011-07-03 11:47:42

标签: javascript

    var obj = {

        func: function() {    
        return: {
           add: function() {
             }
          } 
        },
        somefunc: function() {
      }
   } 

我用来转换此内容的原始代码...

var hash = (function() {
     var keys = {};
     return {         
     contains: function(key) {
     return keys[key] === true;         
     },
     add: function(key) { 
     if (keys[key] !== true){
         keys[key] = true;             
     }     
  }; 
})();

问题:

  1. return关键字有什么用?
  2. 我可以像这样构建我的班级吗?

3 个答案:

答案 0 :(得分:16)

在最基本的层面上,return关键字定义了函数应返回的内容。所以,如果我有这个功能:

function foo() { return 4; }

然后叫它:

var bar = foo();

foo()将返回4,因此现在bar的值也是4

根据您的具体示例:

在此用例中,return用于基本上限制对hash变量内变量的外部访问。

任何类似的函数:

(function() {...})();

是自我调用,这意味着它会立即运行。通过将hash的值设置为自调用函数,这意味着代码可以尽快运行。

该函数然后返回以下内容:

return {         
    contains: function(key) {
        return keys[key] === true;         
    },
    add: function(key) { 
        if (keys[key] !== true){
            keys[key] = true;             
        }
    }     
};

这意味着我们可以同时访问containsadd功能:

hash.contains(key);
hash.add(key);

hash内,还有一个变量keys,但hash设置的自调用函数不返回,因此我们无法访问keyhash之外,所以这不起作用:

hash.keys //would give undefined

它本质上是一种构造代码的方法,可以通过使用JavaScript闭包来创建私有变量。有关详细信息,请查看此帖子:http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-private-variables-in-javascript/

希望这有助于:)

杰克。

答案 1 :(得分:4)

立即执行的匿名函数通常用于创建范围。您在范围内声明的任何变量都是函数的本地变量,因此它们不会污染全局范围。

return语句用于从匿名函数返回一个对象:

var hash = (function() {
  return { ... };
})();

您可以使用命名函数编写相同的内容:

function createHashObject() {
  return { ... };
}

var hash = createHashObject();

答案 2 :(得分:1)

我不知道你的实际代码是什么,但这些是封闭约翰

function addGenerator( num ) {
return function( toAdd ) {
  return num + toAdd
};
}
var addFive = addGenerator( 5 );
alert( addFive( 4 ) == 9 );

在此您可以看到使用return