javaScript在多人協做時,若是定義過多的全局變量 有可能形成全局變量命名衝突,使用閉包來解決功能對變量的調用 將變量寫到一個獨立的空間裏面 就是閉包裏面java
1 var name = "外部name"; 2 var init = (function(){ 3 var name = "內部name"; 4 function callName(){ 5 console.log(name); 6 //打印name 7 } 8 return function(){ 9 callName(); 10 //造成接口 11 } 12 }()); 13 init();
將最後一個函數return以後返回給init函數造成一個執行callName()函數的接口 開啓callName()這個功能 這樣作造成了一個閉包 閉包的變量私有化不會污染全局變量 閉包
執行init() 打印的name與外部的name互不影響函數
使用這種方式也有利於實現各類操做 不污染全局變量就能夠把特定的功能寫到一個閉包裏面去 而後留出一個接口方便啓用這個功能code
var name = "GlobalName"; //全局變量 var init = (function(){ var name = "initName"; function callName(){ console.log(name); //打印name } return function(){ callName(); //造成接口 } }()); init(); // --> initName var initSuper = (function(){ var name = "initSuperName"; function callName(){ console.log(name); //打印name } return function(){ callName(); //造成接口 } }()); initSuper(); // --> initSuperName
在執行init( )和initSuper( )時打印的name值互不影響接口