この記事の例は、JavaScript で競合を回避する方法を説明しています。必要な友人はそれについて学ぶことができます
[1] エンジニア A が関数 A
var a = 1; var b = 2; alert(a+b);//3
[2] エンジニア B は新しい関数 B を追加します
var a = 2; var b = 1; alert(a-b);//1
[3] 前のステップで、エンジニア B が知らないうちに同じ名前の変数 a を定義したため、対立。したがって、匿名関数を使用してスクリプトをラップし、変数のスコープが匿名関数内で制御されるようにします。
//功能A (function(){ var a = 1; var b = 2; alert(a+b);//3 })(); //功能B (function(){ var a = 2; var b = 1; alert(a-b);//1 })();
[4] この時点で、Web ページに関数 C が追加され、関数 A の変数 b を使用する必要があります。したがって、ウィンドウ スコープでグローバル変数を定義し、それをブリッジとして使用して、匿名関数間の通信を完了します
//全局变量 var str; //功能A (function(){ var a = 1; //将b的值赋给str var b = str = 2; alert(a+b);//3 })(); //功能B (function(){ var a = 2; var b = 1; alert(a-b);//1 })(); //功能C (function(){ //将str的值赋给b var b = str; alert(b);//2 })();
[5] ただし、関数 C の場合も必要です関数 A の変数 a。この時点で、別のグローバル変数
//全局变量 var str,str1; //功能A (function(){ //将a的值赋给str1 var a = str1 = 1; //将b的值赋给str var b = str = 2; alert(a+b);//3 })(); //功能B (function(){ var a = 2; var b = 1; alert(a-b);//1 })(); //功能C (function(){ //将str1的值赋给a var a = str1; //将str的值赋给b var b = str; alert(a*b);//2 })();
[6] を定義する必要がありますが、匿名関数は相互に通信する必要があるため、より多くの変数が必要になります、より多くのグローバル変数が必要になります。したがって、グローバル変数の数を厳密に制御する必要があります。ハッシュ オブジェクトをグローバル変数として使用すると、必要な変数をオブジェクトの属性として使用できるため、グローバル変数の数が十分に少なく、スケーラビリティが非常に優れています。 🎜>
//全局变量 var GLOBAL = {}; //功能A (function(){ //将a的值赋给GLOBAL.str1 var a = GLOBAL.str1 = 1; //将b的值赋给GLOBAL.str var b = GLOBAL.str = 2; alert(a+b);//3 })(); //功能B (function(){ var a = 2; var b = 1; alert(a-b);//1 })(); //功能C (function(){ //将GLOBAL.str1的值赋给a var a = GLOBAL.str1; //将GLOBAL.str的值赋给b var b = GLOBAL.str; alert(a*b);//2 })();
//全局变量 var GLOBAL = {}; //功能A (function(){ //将a的值赋给GLOBAL.str1 var a = GLOBAL.str1 = 1; //将b的值赋给GLOBAL.str var b = GLOBAL.str = 2; alert(a+b);//3 })(); //功能B (function(){ //将a的值赋给GLOBAL.str1 var a = GLOBAL.str1 = 2; var b = 1; alert(a-b);//1 })(); //功能C (function(){ //将GLOBAL.str1的值赋给a var a = GLOBAL.str1; //将GLOBAL.str的值赋给b var b = GLOBAL.str; alert(a*b);//2 })(); //功能D (function(){ //将GLOBAL.str1的值赋给a var a = GLOBAL.str1; alert(a*2);//4 })();
//全局变量 var GLOBAL = {}; //功能A (function(){ GLOBAL.A = {}; //将a的值赋给GLOBAL.A.str1 var a = GLOBAL.A.str1 = 1; //将b的值赋给GLOBAL.A.str var b = GLOBAL.A.str = 2; alert(a+b);//3 })(); //功能B (function(){ GLOBAL.B = {}; //将a的值赋给GLOBAL.B.str1 var a = GLOBAL.B.str1 = 2; var b = 1; alert(a-b);//1 })(); //功能C (function(){ //将GLOBAL.A.str1的值赋给a var a = GLOBAL.A.str1; //将GLOBAL.A.str的值赋给b var b = GLOBAL.A.str; alert(a*b);//2 })(); //功能D (function(){ //将GLOBAL.B.str1的值赋给a var a = GLOBAL.B.str1; alert(a*2);//4 })();
//以功能A为例 (function(){ var a = 1, b = 2; GLOBAL.A = {}; GLOBAL.A.CAT = {}; GLOBAL.A.DOG = {}; GLOBAL.A.CAT.name = 'mimi'; GLOBAL.A.DOG.name = 'xiaobai'; GLOBAL.A.CAT.move = function(){}; GLOBAL.A.str1 = a; GLOBAL.B.str = b; })();
var GLOBAL = {}; GLOBAL.namespace = function(str){ var arr = str.split('.'); var o = GLOBAL; var start = 0; if(arr[0] == 'GLOBAL'){ start = 1; }else{ start = 0; } for(var i = start; i < arr.length; i++){ o[arr[i]] = o[arr[i]] || {}; o = o[arr[i]]; } }; //功能A (function(){ var a = 1; var b = 2; GLOBAL.namespace('A.CAT'); GLOBAL.namespace('A.DOG'); GLOBAL.A.CAT.name = 'mimi'; GLOBAL.A.DOG.name = 'xiaobai'; GLOBAL.A.CAT.move = function(){}; GLOBAL.A.str1 = a; GLOBAL.A.str = b; alert(a+b);//3 })(); //功能B (function(){ var a = 2; var b = 1; GLOBAL.namespace('B'); GLOBAL.B.str1 = a; alert(a-b);//1 })(); //功能C (function(){ var a = GLOBAL.A.str1; var b = GLOBAL.A.str; alert(a*b);//2 })(); //功能D (function(){ var a = GLOBAL.B.str1; alert(a*2);//4 })();
var GLOBAL = {}; GLOBAL.namespace = function(str){ var arr = str.split('.'); var o = GLOBAL; var start = 0; if(arr[0] == 'GLOBAL'){ start = 1; }else{ start = 0; } for(var i = start; i < arr.length; i++){ o[arr[i]] = o[arr[i]] || {}; o = o[arr[i]]; } }; /* * @method 功能A:实现加法运算 * @author 工程师甲 * @connect 1234567 * @time 2015-01-01 */ (function(){ var a = 1; var b = 2; GLOBAL.namespace('A.CAT'); GLOBAL.namespace('A.DOG'); GLOBAL.A.CAT.name = 'mimi'; GLOBAL.A.DOG.name = 'xiaobai'; GLOBAL.A.CAT.move = function(){}; GLOBAL.A.str1 = a; GLOBAL.A.str = b; alert(a+b);//3 })(); /* * @method 功能B:实现减法运算 * @author 工程师乙 * @connect 1234567 * @time 2015-01-01 */ (function(){ var a = 2; var b = 1; GLOBAL.namespace('B'); GLOBAL.B.str1 = a; alert(a-b);//1 })(); /* * @method 功能C:实现乘法运算 * @author 工程师丙 * @connect 1234567 * @time 2015-01-01 */ (function(){ var a = GLOBAL.A.str1; var b = GLOBAL.A.str; alert(a*b);//2 })(); /* * @method 功能D:实现乘2运算 * @author 工程师丁 * @connect 1234567 * @time 2015-01-01 */ (function(){ var a = GLOBAL.B.str1; alert(a*2);//4 })();
[1 ] グローバル変数の急増を避ける
[2] 名前空間の合理的な使用
[3] コードに必要なコメントを追加
JavaScript ビデオチュートリアル2.
JavaScript オンラインマニュアル3.ブートストラップ チュートリアル