谈谈对JavaScript的认知

特点

  • 直译式脚本语言
  • 动态、弱类型、基于原型
  • 它的解释器被称为JavaScript引擎,作为浏览器的一部分而存在
  • JavaScript兼容与ECMA标准,所以也被称为ECMAScript
  • 跨平台

js三大对象

本地对象内置对象宿主对象
1. 与宿主无关,独立于宿主环境的ecma实现提供的宿主对象
2.简单通俗的说,本地对象就是ECMA-262定义的类(引用类型)
3.常见的本地对象有Object、String、Number、Boolean、RegExp、Date、Function、Array
4. 在运行过程中通过new来创建实例对象
1.与宿主无关,独立于宿主环境的ECMAScript实现提供的对象
2.内置对象在ECMAScript程序执行之前就已经存在,本身已经是实例化之后的,所以当我们再次使用它时就不需要再去做任何的实例化操作了
3.内置对象是本地对象的子集,常见的内置对象有Global和Math
4.在ECMAScript5中新增了JSON这个存在于全局的内置对象
1. 包括两大类,一类是宿主提供的对象,一类是自定义的对象
2. 所有非本地的对象就是宿主对象
3. 对于存在于网页中的js来说,它的宿主对象就是浏览器提供的对象,比如window和document等
4. 对于DOM和BOM都是宿主对象

谈谈JavaScript为什么是单线程?

JavaScript的单线程与它的用途有关,作为浏览器JavaScript的主要用途就是与用户进行交互以及操作DOM,这就决定了JavaScript只能是单线程不可能为多线程的。我们可以假设JavaScript是多线程的,比如双线程,如果一个线程在某一时刻在一个DOM节点上添加了内容,但是另一个线程在同一时刻删除了这个DOM节点,那么此时浏览器将会变得左右为难,因为它不知道此时该听谁的。所以为了避免复杂性,JavaScript只能采用单线程。虽然HTML5提出了web Worker可以用来给JavaScript创建多个子线程来为主线程减轻负担,但是web Worker完全是受主线程控制的,且不得操作DOM。


谈谈JS的任务队列

单线程就意味着,所有的任务需要排队,前一个任务结束,才会执行后一个任务,那么这时候就会存在一个问题,如果前一个任务执行需要很长时间,那么后一个任务就不得不继续等待着。
于是,所有任务可以分成两种

同步任务—在主线程上排队执行的任务,只有前一个任务执行完毕,后一个任务才会继续执行
异步任务—不进入主线程,而是进入‘任务队列’,只有‘任务队列’通知主线程,某一个异步任务可以执行了,该任务才会进入主线程执行

异步任务的运行机制

  1. 所有同步任务都在主线程上执行,形成一个执行栈
  2. 主线程之外,还存在一个‘任务队列’,只要异步任务有了运行结果,就在‘任务队列’之中放置一个事件
  3. 一旦‘执行栈’中的所有同步任务执行完毕,系统就会读取‘任务队列’,看看里面有哪些事件,那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行
  4. 主线程不断重复上面的第三步
    只要主线程空了,就会去读取’任务队列’,这就是JavaScript的运行机制,这个过程会不断重复
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值