0

我正在探索编写具有性能的 Javascript 模块的方法。

//我的库
var MyModule = 函数(回调){
    变量计数 = 0;

    主要的(); //在我看来很丑

    //我想要公开的函数。
    函数主(){
        计数++;
        window.specialApi.doWorkAndCallback(秘密);
        //…
    }

    //我要保密的函数
    //需要访问计数器变量(#closure)
    函数秘密(){
        如果(计数 === 2){
            打回来();
        }
    }

    //私有函数
    //其他私有函数
    //…
};


//以后任何人都可以使用MyModule。
MyModule(function(){console.log("ok");});

我在这里发现的问题是,每次调用 MyModule() 时,JS VM 都会重新解释整个函数列表,这对性能不利。

是否有允许我执行以下操作的模式:

  • 暴露主要功能。
  • 秘密功能保密。请注意可能会强化任务的计数器变量。
  • 只解析一次MyModule

谢谢

4

2 回答 2

0

以下函数创建并返回一个对象,该对象main仅包含方法:

var MyModule = function(callback){
    var count = 0;

    var secret = function(){
        if(count === 2){
            callback();
        } 
    }

    var main = function(){
        count ++;
        window.specialApi.doWorkAndCallback(secret);
    }

    main();

    return {
        main: main
    };
};

然后,您唯一需要做的就是调用此函数一次并将其返回值存储在变量中:

var module = MyModule(function(){console.log('ok');});

最后,每当您想调用main(并保留 的旧值count)时,只需执行以下操作:

module.main();
于 2013-05-30T16:32:37.253 回答
0
  //My lib
    var modul =  
        {
        count:0,
        callback:{},
        main: function(){
           this.count ++;                        
            window.specialApi.doWorkAndCallback(this.secret);     
        },
        secret: function(){
            if(this.count === 2){
              this.callback();
            } 
        }
    };


    modul.callback = function(){console.log("ok");};
    modul.main();

    modul.callback = function(){console.log("ok");};
    modul.main();

    modul.callback = function(){console.log("ok");};
    modul.main();

    modul.callback = function(){console.log("ok");};
    modul.main();

http://jsbin.com/emitoj/3/edit

于 2013-05-30T16:34:31.307 回答