Init-Time Branching初始时期分支是一种用做优化的模式。如果某些条件在程序启动后就不再改变,那么我们就只需要在初始时期检查一次就可以了,而不是在每次 需要用到这些条件的时候都检查一次。比如,Javascript经常需要判断运行在哪个浏览器里,这个检查工作通常只需要在初始时期完成就可以了。又如, 假设程序在运行期间需要检查是否支持XMLHttpRequest 对象(Ajax应用时的重要对象),如果运行环境支持,那我们就可以认为程序在运行期间一直都可以使用这个对象。

Javascript的程序员都会需要运行环境中是否支持一些特性,比如下面的代码:
// BEFORE
var utils = {addListener: function (el, type, fn) {if (typeof window.addEventListener === 'function') {el.addEventListener(type, fn, false);} else if (typeof document.attachEvent === 'function') { // IEel.attachEvent('on' + type, fn);} else { // older browsersel['on' + type] = fn;}},removeListener: function (el, type, fn) {// pretty much the same...}
};

这段代码没有逻辑上的错误,问题是运行效率不高。因为每次addListener都会检查运行环境是否支持window.addEventListener,这显然有些多余。使用初始时期分支的方法,程序可以改为:
// AFTER
// the interface
var utils = {addListener: null,removeListener: null
};
// the implementation
if (typeof window.addEventListener === 'function') {utils.addListener = function (el, type, fn) {el.addEventListener(type, fn, false);};utils.removeListener = function (el, type, fn) {el.removeEventListener(type, fn, false);};
} else if (typeof document.attachEvent === 'function') { // IEutils.addListener = function (el, type, fn) {el.attachEvent('on' + type, fn);};utils.removeListener = function (el, type, fn) {el.detachEvent('on' + type, fn);};
} else { // older browsersutils.addListener = function (el, type, fn) {el['on' + type] = fn;};utils.removeListener = function (el, type, fn) {el['on' + type] = null;};
}

最后建议不要对运行环境进行过多的“猜测”。比如,运行环境不支持window.addEventListener,并不代表它一定是IE,也不代表它不支持XMLHttpRequest。所以最好把这些运行环境的特性看成是独立的没有关联的条件来检查。

转载于:https://www.cnblogs.com/Bryran/p/3976121.html

JavaScript基础初始时期分支(018)相关推荐

  1. JavaScript基础06-day08【if练习、条件分支语句switch、for循环】

    学习地址: 谷粒学院--尚硅谷 哔哩哔哩网站--尚硅谷最新版JavaScript基础全套教程完整版(140集实战教学,JS从入门到精通) JavaScript基础.高级学习笔记汇总表[尚硅谷最新版Ja ...

  2. JavaScript基础第01天—编程语言—计算机基础—初始JavaScript—JavaScript注释—JavaScript输入输出语句—变量的使用—数据类型—关键字和保留字

    JavaScript基础第01天 1 - 编程语言 1.1 编程 编程: 就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程. 计算机程序: 就是计算机所执行的一系列的 ...

  3. JavaScript基础(一)(编程语言,计算机基础,初始JavaScript,JavaScript注释,输入输出语句,变量的概念,变量的使用,数据类型,解释型语言和编译型语言)

    JavaScript基础第01天 1 - 编程语言 1.1 编程 编程: 就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程. 计算机程序: 就是计算机所执行的一系列的 ...

  4. 前端JavaScript基础知识点

    JavaScript基础 阶段说明 JavaScript基础 Web API JavaScript高级 ##第一天重点内容 变量的声明及使用 数据类型 类型转换 运算符 JavaScript的组成 E ...

  5. 前端基础入门四(JavaScript基础)

    为什么80%的码农都做不了架构师?>>>    目标: 掌握编程的基本思维 掌握编程的基本语法 我们先来学习JavaScript基础,后续会讲解JavaScript高级. 自己是个做 ...

  6. JavaScript基础第02天—运算符(操作符)—流程控制—循环—代码规范

    JavaScript基础第02天 1 - 运算符(操作符) 1.1 运算符的分类 运算符(operator)也被称为操作符,是用于实现赋值.比较和执行算数运算等功能的符号. JavaScript中常用 ...

  7. 阿里架构师学习笔记,一文掌握JavaScript基础

    一 JavaScript 简介 1 JavaScript基本介绍 1 JavaScript 简称JS,是一种动态的弱类型脚本解释型语言,和HTML,CSS并成为三大WEB核心技术,得到了几乎所有主流浏 ...

  8. 前端学习 之 JavaScript基础

    一. JavaScript简介 1. JavaScript的历史背景介绍 1994年,网景公司(Netscape)发布了Navigator浏览器0.9版.这是历史上第一个比较成熟的网络浏览器,轰动一时 ...

  9. JavaScript基础总结(2)

    JavaScript基础总结(2) 六.数组与函数 数组 1. 数组的概念 一组数据的集合,其中的每个数据被称作元素,在数组中可以存放任意类型的元素.数组是一种将一组数据存储在单个变量名下的优雅方式. ...

最新文章

  1. 【java的多态性】
  2. SpringCloud(8)微服务监控Spring Boot Admin
  3. ACM竞赛学习整理--矩阵运算
  4. 快速通读《现代软件工程——构建之法》
  5. redis系列(一):安装配置
  6. 工厂模式和策略模式区别
  7. 如何从JavaScript对象中删除键? [重复]
  8. Hive常见函数大全
  9. iOS底层探索之类的加载(三): attachCategories分析
  10. 类文件结构和字节码指令
  11. 【STM32F407的DSP教程】第2章 Matlab R2018a的安装
  12. Java Timer
  13. macbook终端打开jupyter notebook
  14. Apache SeaTunnel(Incubating) 2.2.0-beta 版本发布!API 重构,连接器与引擎解偶
  15. 降龙十八掌搞定rt3070 USB WIFI模块在android2.3平台上上网[基于x210开发板]
  16. 深入理解python--线程、进程与协程(1)
  17. django_容联云_短信验证
  18. Android studio安装配置
  19. APP上运行小程序的混合移动研发模式
  20. FreeMind介绍

热门文章

  1. python命令解析_python解析命令行
  2. python装饰器实现aop_python中面向切片编程(AOP)和装饰器
  3. 我的世界1.7.2 java_我的世界Java版1.7版本种子分享
  4. 第十六届全国大学生智能车竞赛全部比赛胜利结束了
  5. 第十六届全国大学智能车竞赛全国总决赛竞速组别成绩与奖项
  6. 第十五届全国大学生智能汽车竞赛人工智能创意赛(预赛)
  7. 设计磁标读写模块-STC8G1K08-HALL
  8. hive处理json数据_(转)hive中解析json数组
  9. 王者传奇服务器维护一般多长时间,9377王者传奇合理分配刷图时间其实很重要...
  10. 南方h5手簿使用说明书_雄脱使用非那雄胺米诺地尔效果