JavaScript的理解

个人对JavaScript的理解

web开发离不开html,css和JavaScript。html作为页面最基础的骨架,css则是起到修饰的作用,相当于是页面的皮囊,而js则是使得页面能够与用户进行交互,使得页面具有了“生命”,可以称为是页面的灵魂。三者缺一不可,以目前的技术html/css完全是可以通过计算算法分析图片直接生成出来,而js目前还是无法直接生成出来的,所以他们的重要性孰轻孰重可想而知。想要做好web开发,js是重中之重。

学习js最好买一本工具书,目前我使用的是《JavaScript高级程序设计–第4版》,一本工具书可以作为开发时的资料去查询,也可以作为一本教程去学习。

js是这样定义的

JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。

1.函数优先:指的是变量函数声明优先级提高 (变量提升/函数提升)
2.轻量级:语法简单,弱类型的变量类型,基于Java基本语句和控制的脚本语言,其设计简单紧凑,学了java,js看一下就能上手。
3.解释型:读一行解释一行,不用编译

此外js的跨平台性也很好,因为只要有浏览器或者node就能运行。

js的组成

ECMAScript,描述了该语言的语法和基本对象。
文档对象模型(DOM),描述处理网页内容的方法和接口。
浏览器对象模型(BOM),描述与浏览器进行交互的方法和接口。

ES-> 基础语法
DOM-> 操作网页包括(html/css)等
BOM-> 操作浏览器 (window,history,console)等

我们的学习也要分为这3块来学习。

js执行方式

js是一个单线程的语言,js的执行机制是EventLoop(事件循环)。
单线程意味着同一时间只能做一个事,上一个事没做完,下一个事不允许做。(阻塞)但是我们看到的网页往往是“多线程”的,比如可以一边发请求,一边通过页面聊天,一边进行一些交互,其实这是用到了异步操作,和EventLoop,其本质还是单线程的。

为什么js要设计成单线程呢?

最初设计JS是用来在浏览器验证表单操控DOM元素的是一门脚本语言,如果js是多线程的,那么两个线程同时对一个DOM元素进行了相互冲突的操作,那么浏览器的解析器是无法执行的。

什么是异步操作?

说到异步操作就要说同步操作,同步操作就是只代码自上而下按顺序执行,一旦遇到错误,后续代码无法执行。但是这是我们在程序中不希望看到的,哪怕代码执行错误,也要执行后续代码,这样用户就不会因为一个错误导致程序无法操作了。

如何实现异步操作?

主要是靠EventLoop机制来实现的。
我们可以将js中的任务分为同步任务,和异步任务。
同步任务是在主线程上执行,异步任务则是进入一个任务队列。异步任务又可以分为宏任务/微任务。宏任务有自己的宏任务队列,微任务也有自己的微任务队列。

常见的宏任务有script,setTimeout,setInterval,io操作等
常见微任务有promise.then(),Object.observe()

执行流程:首先会执行script,也就是浏览器中js最外层的<script>标签,这时候遇到同步任务就执行同步任务,遇到宏任务将宏任务放入宏任务队列,遇到微任务将微任务放入微任务队列(注意宏任务和微任务都是先放入队列,还没执行)然后第一次事件循环执行结束。这时候开始执行第二次事件循环,会先将宏任务队列里的第一个任务拿出来,然后执行同步任务,再把第一次事件循环中的微任务队列中的所有任务清空(按加入顺序执行),然后,遇到宏任务将宏任务放入宏任务队列,遇到微任务将微任务放入微任务队列,等所有同步任务和上一次微任务队列清空后执行该执行栈中的宏任务。同理直到宏任务队列清空为止。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值