懒惰函数定义

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.总结

  • 应用频繁,如果只用一次,是体现不出它的优点出来的,用的次数越多,越能体现这种模式的优势所在;

  • 固定不变,一次判定,在固定的应用环境中不会发生改变;

  • 复杂的分支判断,没有差异性,不需要应用这种模式;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原文: https://github.com/ecomfe/spec/blob/master/javascript...
    zock阅读 3,391评论 2 36
  • HTML HTML5标签 媒体查询head部分写法 Doctype作用? 严格模式与混杂模式如何区分?它们有何意义...
    Mayo_阅读 664评论 0 8
  • 事件流: 事件流:页面接收事件的顺序。 IE定义的:事件冒泡流(由最具体的元素依次传播到DOM树的最上层的Docu...
    xiaoguo16阅读 603评论 0 0
  • 什么是事件: 事件是交互体验的核心功能 一.事件冒泡: 当一个事件发生时,这个事件会从内向外逐层传递。 二.为什么...
    轻描淡写mua阅读 525评论 0 0
  • @转自GitHub 介绍js的基本数据类型。Undefined、Null、Boolean、Number、Strin...
    YT_Zou阅读 1,184评论 0 0