Declaring Singleton with public and private members in Javascript

I just had my javascript venture reviewed by my buddy Kenneth Wrang, who I consider a master of Javascript (eventhough he wouldn't admit it). I learned a few valuable things about this language, and how it differ to other languages like C#.

The first one I want to share here is how to declare singleton in Javascript, and how I could create private/public members. They may not be obvious since Javascript doesn't have special keywords for class, public and private modifiers.

var aSingleton = (function() {

    // NOTE 1: these are the private members 
    // they will not be accessible from outside the scope of this 'function'
    
    var privateMember = "test";
    var someCollection = [];
    
    // NOTE 2: this is a private class within the singleton
    // var1 and var2 are the dependencies of the class
    // similar to a constructor in other language like C#
    
    function aPrivateClass(var1, var2) {
        
        // NOTE 3: state is also a private member
        
        var state = "state";
				
        return {
            
            // NOTE 4: public member to the private class
            
            anInnerFunction: function() {
                $(document.body).append("<p>" + state + "</p>");
            }
        };
    }
    
    return {
        
        // NOTE 5: these are the public members
       
        aPublicFunction: function() {
            
            // NOTE 6: private class will be accessible from the public methods
            // thanks to Closure
            
            someCollection.push(aPrivateClass("dependency1", "dependency2"));
						
            // NOTE 7: eventhough the private members of the private class cannot 
            // be accessed, the public members of the private class are.
            
            someCollection[0].anInnerFunction();
        }
    };
})();

// NOTE 8: from this point on, we have our singleton created
// with only the public members exposed.

aSingleton.aPublicFunction();

Most of the notes are already done in-line, so hopefully the example will be self explanatory. However I'd like to point out something that may not be obvious:

Private members are all members before the return statement

for e.g

Note 1, Note 2 in the scope of aSingleton, and

Note 3 in the scope of aPrivateClass.

Public members are all the members inside the return statement

for e.g

Note 5 in the scope of aSingleton, and

Note 4 in the scope of aPrivateClass.