惰性函数


# 惰性函数

## 函数重写
一个函数执行之后, 被另一个函数覆盖了。 其实就是你之前函数指针, 指向了另一个新函数.
```
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. 分支判断,调用的所有结果都会走同样的分支。
适用浏览器的兼容性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值