2016-12-07 58 views
0

我想转向模块化方法来重写大型js项目。我希望使用require.js来管理这个。处理模块化js中的全局变量

但是,我在理解如何重新编码以消除全局变量方面存在一些困难。

那么,,比如,我以前有

var global = 1; //define global 
somefunction(); //call function that uses global 

function somefunction(){ 
    var local = global * 2; //use global 
    console.log("local = " local); //output 
    }; 

和重写require.js

define(function(){ 

    return { 

    somefunction: function() { 

     var local = global * 2; //still using global 
     console.log("local = " local); //output 


     }; 

     }; 

    }); 

我将如何改写这个本地化全球,使之真正模块化。

+0

“全局”是否意味着*仅由该模块使用*? –

回答

0

假设global旨在通过该模块只使用,你define回调中定义它:

define(function(){ 
    var global = 1; // <============= 

    return { 

    somefunction: function() { 

     var local = global * 2; 
     console.log("local = " local); //output 


     }; 

     }; 

    }); 

如果你想global被其他模块使用,你把它放在它自己的模块,并有模块require它。我认为使用这种模块的风格意味着你必须使它成为一个对象属性(使用ES2015模块,你不必)。

+0

谢谢。我猜到了。那么每个使用全局的模块都必须要求它? – user3617712

+0

@ user3617712:是的,这是主意。使全局变得有效过时。 –