用一个变量来保存第一次的返回值, 如果它已经被赋值过, 那么在以后的调用中优先返回该变量. 而真正创建遮罩层的代码是通过回调函数的方式传人到singleton包装器中的. 这种方式其实叫桥接模式.
桥接模式的作用在于将实现部分和抽象部分分离开来, 以便两者可以独立的变化。
能不能找到一个通用的singleton包装器?
遗憾的是js的函数式特性还不足以完全的消除声明和语句.
// 是抽象部分
var singleton function(fn){var res;
return res|| res = fn.apply(this,arguments);
}
// 实现部分
var creatMask = singleton(function(){
return document.body.appendChild(document.createElement(div));
});
//迭代数组
forEach = function( ary, fn ){
for ( var i = 0, l = ary.length; i < l; i++ ){
var c = ary[ i ];
if ( fn.call( c, i, c ) === false ){
return false;
}
}
}
forEach
(
[
1
,
2
,
3
]
,
function
(
i
,
n
)
{
alert
(
n
*
2
)
}
)