懒惰函数定义
1.举个例子
var scareMe = function () { alert("king"); scareMe = function () { alert("double king"); } }
scareMe(); // king scareMe(); //double king
优点:函数有些初始化工作要做,并且仅需执行一次,可以使用这种模式,显著提升程序性能
缺点:当他重定义自身时已经添加到原始函数上的任何属性都会丢失;吐过函数开始分配给了另一个变量或者对象的方法,则重定义行为不会发生
2.应用
2.1 浏览器兼容性检测
function addEvent (type, element, fun) { if (element.addEventListener) { element.addEventListener(type, fun, false); } else if(element.attachEvent){ element.attachEvent('on' + type, fun); } else{ element['on' + type] = fun; } }
使用上述代码会执行重复检测,而同一个应用环境中,只需检测一次
function addEvent (type, element, fun) { if (element.addEventListener) { addEvent = function (type, element, fun) { element.addEventListener(type, fun, false); } } else if(element.attachEvent){ addEvent = function (type, element, fun) { element.attachEvent('on' + type, fun); } } else{ addEvent = function (type, element, fun) { element['on' + type] = fun; } } return addEvent(type, element, fun); }
重写上述函数,并在函数内部根据判断重定义了自身
2.2创建单例对象
unction Universe() { // 缓存的实例 var instance = this; // 其它内容 this.start_time = 0; this.bang = "Big"; // 重写构造函数 Universe = function () { return instance; }; }
3.总结
-
应用频繁,如果只用一次,是体现不出它的优点出来的,用的次数越多,越能体现这种模式的优势所在;
-
固定不变,一次判定,在固定的应用环境中不会发生改变;
-
复杂的分支判断,没有差异性,不需要应用这种模式;