JavaScript Lazy Singleton

HTML

<div id="console"></div>

JavaScript

function log(msg){
    document.getElementById('console').innerHTML+=msg+'<br />';
}

var LazySingleton = function(){
    var val = 1, _instance;
    var lazy_init = function(){
        log('Lazy init, exec no more than once.');
        return {
            getVal : function(){ return val; },
            setVal : function(v){ val = v; }
        };
    };
    var init = function(){
        init = function(){ return _instance; };
        return _instance = lazy_init();
    };
    return {
        getInstance : function(){ return init(); }
    };
}();


log('load before lazy init.');
log(LazySingleton.getInstance().getVal()); // will exec lazy init