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等)

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

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

相关推荐
倾颜3 小时前
从 textarea 到 AI 输入框:用 Tiptap 实现 / 命令、@ 引用和结构化请求
前端·langchain·next.js
kyriewen4 小时前
程序员连夜带团队跑路,省了23万:这AI太贵,真的用不起了
前端·javascript·openai
kyriewen5 小时前
你写的代码没有测试,就像出门不锁门——Jest + Testing Library 从入门到不慌
前端·单元测试·jest
yuzhiboyouye6 小时前
web前端英语面试
前端·面试·状态模式
canonical_entropy7 小时前
下一代低代码渲染框架 nop-chaos-flux 的设计原则
前端·低代码·前端框架
东方小月7 小时前
5分钟搞懂Harness Engineering(驾驭工程):从提示词到AI Agent的进化之路
前端·后端·架构
我叫黑大帅7 小时前
为什么需要 @types/react?解决“无法找到模块 react 的声明文件”报错
前端·javascript·面试
之歆7 小时前
DAY_21JavaScript 深度解析:数组(Array)与函数(Function)(一)
前端·javascript
XinZong8 小时前
【AI社交】基于OpenClaw自研轻量化AI社交平台实战
前端
Le_ee8 小时前
ctfweb:php/php短标签/.haccess+图片马/XXE
开发语言·前端·php