惰性函数

函数高阶3

函数重写

一个函数执行之后, 被另一个函数覆盖了。 其实就是你之前函数指针, 指向了另一个新函数.

function fun_a(){
	console.log('fun_a');
	fun_a = function(){
		console.log("fun_b");
	}
}

fun_a();  // fun_a,  并且让fun_a指向新函数
fun_a();  // fun_b

看例子

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;
    }
}

每次给浏览添加事件的时候,都会做判断。 其实,我们在第一次用addEvent函数的时候,就已经可以确定浏览器了,之后所有调用addEvent都会做同样的判断,走同样的分支。在上面我们已经知道了 函数重写了, 那么我们在一次做出判断之后,重写 addEvent 函数,这样以后调用的时候就不需要判断了。
改写成如下形式: 利用到了立即执行函数,在函数加载的时候就做出了判断,返回确定函数

var addEvent = (function () {
    if (document.addEventListener) {
        return function (type, element, fun) {
            element.addEventListener(type, fun, false);
        }
    }
    else if (document.attachEvent) {
        return function (type, element, fun) {
            element.attachEvent('on' + type, fun);
        }
    }
    else {
        return function (type, element, fun) {
            element['on' + type] = fun;
        }
    }
})();

惰性函数

惰性函数的本质是函数重写。
惰性函数, 是指在执行之后才能确定函数本身,不是确定在定义时。

适用场景

  1. 应用频繁,如果只用一次,是体现不出它的优点出来的,用的次数越多,越能体现这种模式的优势所在;
  2. 分支判断,调用的所有结果都会走同样的分支。
    适用浏览器的兼容性。
posted @ 2020-11-24 16:55  Cyrus_Br  阅读(162)  评论(0编辑  收藏  举报