I’ve been steadily migrating my JavaScript assets to use self executing functions (and more recently literals) as they are a good way to enforce scope on variables and make your JavaScript more readable.
The examples below show the difference between implementing a self-executing function and using literals.
I have found that on most browsers (except Safari), there is a considerable performance win when using literals.
Creating a module via a self-executing function
obj = (function () { var _privateVar; var publicVar; function setPrivateVar(value) { _privateVar = value; } function getPrivateVar(value) { return _privateVar; } // api return { publicVar: publicVar, setPrivateVar: setPrivateVar, getPrivateVar: getPrivateVar } }());
Creating a module via object literals
obj = { _privateVar: undefined, publicVar: undefined, setPrivateVar: function setPrivateVar(value) { obj._privateVar = value; }, getPrivateVar: function getPrivateVar(value) { return obj._privateVar; } };