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;
}
};
})();
问题:
答案 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;
}
}
};
这意味着我们可以同时访问contains
和add
功能:
hash.contains(key);
hash.add(key);
在hash
内,还有一个变量keys
,但hash
设置的自调用函数不返回,因此我们无法访问key
在hash
之外,所以这不起作用:
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