zoukankan      html  css  js  c++  java
  • 惰性函数

    函数高阶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. 分支判断,调用的所有结果都会走同样的分支。
      适用浏览器的兼容性。
  • 相关阅读:
    Graphics—对话框操作
    Visual Studio 2013 出现error C4996(fopen函数出错)如何解决
    Visual Studio 2013出现错误LNK 2026(SAFESEH模块不兼容)如何解决
    Graphics—菜单设置笔记
    kali 根目录中文乱码
    sqlite文件损坏修复
    win10,mysql安装
    flask 对从数据库反向生成的表进行修改
    flask第一章:项目环境搭建
    flask 连接数据各种报错
  • 原文地址:https://www.cnblogs.com/cyrus-br/p/10529711.html
Copyright © 2011-2022 走看看