On the most basic level, the return keyword defines what a function should return. So if I have this function:
function foo() { return 4; }
And then call it:
var bar = foo();
foo() will return 4, hence now the value of bar is also 4.
Onto your specific example:
In this use case the return is used to basically limit outside access to variables inside the hash variable.
Any function written like so:
(function() {...})();
Is self-invoking, which means it runs immediately. By setting the value of hash to a self-invoking function, it means that code gets run as soon as it can.
That function then returns the following:
return {
contains: function(key) {
return keys[key] === true;
},
add: function(key) {
if (keys[key] !== true){
keys[key] = true;
}
}
};
This means we have access to both the contains and add function like so:
hash.contains(key);
hash.add(key);
Inside hash, there is also a variable keys but this is not returned by the self-invoking function that hash is set to, hence we cannot access key outside of hash, so this wouldn't work:
hash.keys //would give undefined
It's essentially a way of structuring code that can be used to create private variables through the use of JavaScript closures. Have a look at this post for more information: http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-private-variables-in-javascript/
Hope this Helps :)
Jack.