I am currently writing all javascript functionality of a certain page in JQuery's document.ready handler:
$(document).ready(function() {
    var one, two, three;
    function f1(par1) {}
    function f2() {}
        ...
});
I feel that this isn't optimal or according to Javascript best practices. What I need is a private scope for the page's functionality, nothing needs to be called externally.
I've seen a number of different ways:
jQuery source
(function(window) { 
    var anObj = {};
    ... 
    window.functionality = anObj;
}(window));
A function that is self-invoked with the window as parameter, then setting the functionality object of your application on it. 
Codemirror source
window.functionality = (function() {
   var functionality = {};
   ...
   return functionality;
}());
Very similar to what jQuery does, but setting the functionality object indirectly on window by making a self-invoking function return something first.
This question
var functionality = {};
(function(obj) { obj.f1 = ... }(functionality));
Creating a local variable (instead of on window), and setting its content inside a self-invoked function (why?)
How do I declare a namespace in JavaScript?
var functionality = { 
    f1: function(){}, 
    f2: function(){}
}
Pretty much the same as the previous thing but setting the contents without a self-invoking function (again why use or not use the self invoking function?).
 
     
    