js面试题关键字区别事件循坏同步异步

let const var区别

在JavaScript中,let、const和var是用于声明变量的关键字,它们之间存在一些差异。以下是详细介绍:

  • var。在ES5及之前的版本中,使用var关键字声明变量。它的特点包括函数作用域,即变量的作用域仅限于声明它的函数内部;变量提升,即在声明变量之前使用它不会报错,但值默认为undefined;可以重复声明同一个变量。
  • let。在ES6中引入的let关键字用于声明块级作用域的变量。它的特点包括块级作用域,即变量只在当前代码块内有效;不可重复声明,即同一个作用域内不能多次声明同一个变量;没有变量提升,即在声明语句之前使用它会导致ReferenceError错误。
  • const。在ES6中引入的const关键字用于声明常量。它的特点包括块级作用域,即常量只在当前代码块内有效;常量一旦被赋值就不能修改,尝试修改会抛出TypeError错误;不可重复声明,即同一个作用域内不能多次声明同一个常量。

综上所述,三者的主要区别在于变量作用域、变量提升和变量重复声明。通常推荐使用let和const来声明变量,以避免变量提升和重复声明等问题,从而使得代码更加安全和规范.

js 同步与异步

首先JavaScript语言的一大特点就是单线程,即(同一时间只能做一件事情),同步任务即阻塞模式。 异步任务即非阻塞模式。 同步任务都在主线程上执行,形成一个执行栈。

异步任务(js的异步是通过回调函数实现的放入到消息队列中比如:

① 普通的事件。click、resize等

② 资料加载,load、error 等

③ 定时器,setInterval、setTimeout等

执行顺序:

①先执行执行栈中的同步任务

② 异步任务(回调函数)放入任务队列中

③ 一旦执行栈中的所有同步任务执行完毕,系统就会按次序读取任务队列中的异步任务,于是被读取的异步任务结束等待状态,进入执行栈,开始执行。

事件循环

我们把任务分为同步任务和异步任务。js把异步任务分为宏任务和微任务

在es5之后,JavaScript引入了promise,这样不需要浏览器,JavaScript引擎自身也能够发起异步任务了。

宏任务 由(浏览器、node发起)、 微任务 由(js引擎发起的任务)比如promise(Promise本身是同步的,then/catch的回调函数是异步的)

所以我们把代码可能分为3种

① 同步代码(js执行栈/回调栈)

② 微任务的异步代码(js引擎) process.nextTick (node) promise.then( ) catch( )

Async/Await Object.observer等等

③ 宏任务的异步代码 script(代码块) setTimeout/ setInterval定时器 setImmediate 定时器

再看三种代码的执行顺序: 同步代码 →微任务的异步代码(promise等) →宏任务的异步代码(setTimeout/ setInterval等)

什么是事件循环?调用堆栈和任务队列之间有什么区别?

事件循环是一个单线程循环,用于监视调用堆栈并检查是否有工作即将在任务队列中完成。如果调用堆栈为空并且任务队列中有回调函数,则将回调函数出队并推送到调用堆栈中执行。

相关推荐
Mintopia2 分钟前
Three.js 高级纹理(Advanced Textures):超越基础,打造沉浸式 3D 世界
前端·javascript·three.js
玄玄子2 分钟前
JS Promise
前端·javascript·程序员
Raink老师7 分钟前
7. TypeScript接口
javascript·typescript
Thanks_ks10 分钟前
探索现代 Web 开发:从 HTML5 到 Vue.js 的全栈之旅
javascript·vue.js·css3·html5·前端开发·web 开发·全栈实战
GIS之路14 分钟前
OpenLayers 获取地图状态
前端·javascript·html
FogLetter30 分钟前
深入理解Flex布局:grow、shrink和basis的计算艺术
前端·css
remember_me31 分钟前
前端打印实现-全网最简单实现方法
前端·javascript·react.js
前端小巷子33 分钟前
IndexedDB:浏览器端的强大数据库
前端·javascript·面试
Whbbit199933 分钟前
如何使用 Vue Router 的类型化路由
前端·vue.js
JYeontu38 分钟前
浏览器书签还能一键下载B站视频封面?
前端·javascript