美文网首页
关于JS的认知

关于JS的认知

作者: xymspace | 来源:发表于2020-05-31 20:53 被阅读0次
    JS高级程序设计

    简介

    • 布兰登·艾奇--->JS之父
    • JS的三大组成
    1. 核心(ECMAScript),由 ECMA-262 定义,提供核心语言功能
    2. 文档对象模型(DOM),提供访问和操作网页内容的方法和接口
    3. 浏览器对象模型(BOM),提供与浏览器交互的方法和接口

    HTML中使用JS

    • 向 HTML 页面中插入 JavaScript 的主要方法,就是使用<script>元素
    • JS为Web 增加统一的脚本支持。而 Web 诞生早期的很多做法也都保留了下来,并被正式纳入 HTML 规范当中
    • 考虑到约定俗成和最大限度的浏览器兼容性,目前 type 属性的值依旧还是
      text/javascript。不过,这个属性并不是必需的,如果没有指定这个属性,则其默认值仍为text/javascript
    • HTML 4.01 为<script>标签定义了 defer 属性。这个属性的用途是表明脚本在执行时不会影响页面的构造。也就是说,脚本会被延迟到整个页面都解析完毕后再运行。因此,在<script>元素中设置defer 属性,相当于告诉浏览器立即下载,但延迟执行

    数据类型

    null 和 undefined

    • 位于 null 和 undefined 之间的相等操作符(==)总是返回 true,不过要注意的是,这个操作符出于比较的目的会转换其操作数

    • Undefined 类型只有一个值,即特殊的 undefined。在使用 var 声明变量但未对其加以初始化时,这个变量的值就是 undefined

    • Null 类型是第二个只有一个值的数据类型,这个特殊的值是 null。从逻辑角度来看,null 值表示一个空对象指针,而这也正是使用 typeof 操作符检测 null 值时会返回"object"的原因

    单线程

    JS是单线程的,所有的I/O操作,都有特定的操作队列。

    宏任务和微任务

    • 宏任务执行结束,会让浏览器刷新,进行一次真实dom操作。
    • 微任务是处于两个宏任务之间,微任务的执行结束,不会产生真实dom操作。
    • 宏任务与微任务,都有自己的任务队列,所有宏任务在一个队列,微任务在一个队列
    • JS将宏任务和微任务依次标记,并放在任务队列中。由浏览器(浏览器是多线程的)发起异步处理。待JS主线程忙完,JS会轮询事件队列,根据添加任务顺序(宏任务1,微任务1,微任务2),将任务依次压栈处理(微任务1,微任务2,宏任务1)
    • 当出现多个宏任务和微任务,JS通过事件轮询,先处理位于主线程中的宏任务和微任务,并将其他宏任务和微任务依次放入宏任务队列,微任务队列,并做好标记等待随时调用。待主线程闲时,会查看任务队列,即事件轮询,事件轮询不会停止,只会一直监听任务队列状态。若有任务,主线程会依次执行任务队列中的任务(执行顺序为:宏任务2,微任务2.1,2.2,宏任务3,微任务3.1,3.2)。

    JS事件流

    特性:事件冒泡
    父元素与子元素的相同事件都会执行。
    事件为栈结构,父事件先进栈。

    相关文章

      网友评论

          本文标题:关于JS的认知

          本文链接:https://www.haomeiwen.com/subject/bvrnihtx.html