关于JavaScript的最头疼的事情之一是,它的变量没有特定的作用范围。 一般情况下,任何变量,函数,数组或对象都是全局性,这意味着在同一页上的其他脚本可以访问并覆盖它们。解决方法是把变量封装在一个匿名函数中。 例如,下面的定义将产生三个全局变量和和两个全局函数:
1 var name = 'Chris'; 2 var age = '34'; 3 var status = 'single'; 4 function createMember(){ 5 // [...] 6 } 7 function getMemberDetails(){ 8 // [...] 9 }
封装后如下:
1 var myApplication = function(){ 2 var name = 'Chris'; 3 var age = '34'; 4 var status = 'single'; 5 return{ 6 createMember:function(){ 7 // [...] 8 }, 9 getMemberDetails:function(){ 10 // [...] 11 } 12 } 13 }(); 14 // myApplication.createMember() and 15 // myApplication.getMemberDetails() now works.
这被称为单体模式,是JavaScript设计模式的一种,这种模式在YUI中用得非常多,改进的写法是:
1 ar myApplication = function(){ 2 var name = 'Chris'; 3 var age = '34'; 4 var status = 'single'; 5 function createMember(){ 6 // [...] 7 } 8 function getMemberDetails(){ 9 // [...] 10 } 11 return{ 12 create:createMember, 13 get:getMemberDetails 14 } 15 }(); 16 //myApplication.get() and myApplication.create() now work.