转载自:http://www.cnblogs.com/webw3c/archive/2011/09/21/2183092.html
匿名函数
关于JavaScript的最头疼的事情之一是,它的变量没有特定的作用范围。 一般情况下,任何变量,函数,数组或对象都是全局性,这意味着在同一页上的其他脚本可以访问并覆盖它们。解决方法是把变量封装在一个匿名函数中。 例如,下面的定义将产生三个全局变量和和两个全局函数:
01 | <span style= "font-family: verdana, geneva;" > var name = 'Chris' ; |
02 | var age = '34' ; |
03 | var status = 'single' ; |
04 | function createMember(){ |
05 | // [...] |
06 | } |
07 | function getMemberDetails(){ |
08 | // [...] |
09 | } |
10 | </span> |
封装后如下:
01 | <span style= "font-family: verdana, geneva;" > var myApplication = function (){ |
02 | var name = 'Chris' ; |
03 | var age = '34' ; |
04 | var status = 'single' ; |
05 | return { |
06 | createMember: function (){ |
07 | // [...] |
08 | }, |
09 | getMemberDetails: function (){ |
10 | // [...] |
11 | } |
12 | } |
13 | }(); |
14 | // myApplication.createMember() and |
15 | // myApplication.getMemberDetails() now works. |
16 | </span> |
这被称为单体模式,是JavaScript设计模式的一种,这种模式在YUI中用得非常多,改进的写法是:
01 | <span style= "font-family: verdana, geneva;" > var myApplication = function (){ |
02 | var name = 'Chris' ; |
03 | var age = '34' ; |
04 | var status = 'single' ; |
05 | function createMember(){ |
06 | // [...] |
07 | } |
08 | function getMemberDetails(){ |
09 | // [...] |
10 | } |
11 | return { |
12 | create:createMember, |
13 | get:getMemberDetails |
14 | } |
15 | }(); |
16 | //myApplication.get() and myApplication.create() now work. |
17 | </span> |