• 惰性函数


    函数高阶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. 分支判断,调用的所有结果都会走同样的分支。
      适用浏览器的兼容性。
  • 相关阅读:
    PAT 1097. Deduplication on a Linked List (链表)
    PAT 1096. Consecutive Factors
    PAT 1095. Cars on Campus
    PAT 1094. The Largest Generation (层级遍历)
    PAT 1093. Count PAT's
    PAT 1092. To Buy or Not to Buy
    PAT 1091. Acute Stroke (bfs)
    CSS:word-wrap/overflow/transition
    node-webkit中的requirejs报错问题:path must be a string error in Require.js
    script加载之defer和async
  • 原文地址:https://www.cnblogs.com/cyrus-br/p/10529711.html
Copyright © 2020-2023  润新知