1 <script type="text/javascript">
2 //单例模式
3
4 //1,每次点击都会生成一个新的div
5 var createMask=function () {
6 return document.body.appendChild(document.createElement(div));
7 }
8 $("button").click(function(){
9 var mask=createMask();
10 mask.show();
11 });
12
13 //2,有可能这个mask会永远也用不上
14 var mask=document.body.appendChild(document.createMask("div"));
15 $("button").click(function(){
16 mask.show();
17 });
18
19 //3,1)函数体内改变了变量mask的引用,在多人协作的项目中,createMask是个不安全的函数。2)另一方面,mask这个全局变量不是非需不可。
20 var mask;
21 var createMask=function(){
22 if(mask){
23 return mask;
24 }
25 else{
26 mask=document.body.appendChild(document.createElement(div));
27 return mask;
28 }
29 };
30 //4,用闭包的形式,只生成一个mask
31 var createMask=function(){
32 var mask;
33 return function(){
34 return mask||(mask=document.body.appendChild(document.createElement(div)));
35 };
36 }()
37 //5,最终版本
38 var singleton=function(fn){
39 var result;
40 return function(){
41 return result||(result=fn.apply(this,arguments));
42 }
43 }
44 var createMask=singleton(function(){
45 return document.body.appendChild(document.createElement("div"));
46 });
47 用一个变量来保存第一次的返回值,如果它已经被赋过值,那么在以后的调用中,优先返回该值,
48 </script>