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值互不影响接口