首页IT科技js运行机制面试(JS执行机制及ES6)

js运行机制面试(JS执行机制及ES6)

时间2025-04-29 21:54:05分类IT科技浏览3004
导读:一、JS执行机制 JS语言有个特点是单线程,即同一时间只能做一件事。单线程就意味着,所有的任务需要排队,前一个任务结束,才会执行后一个任务,可能造成页面渲染不连贯。...

一           、JS执行机制

JS语言有个特点是单线程           ,即同一时间只能做一件事            。单线程就意味着                  ,所有的任务需要排队      ,前一个任务结束        ,才会执行后一个任务                 ,可能造成页面渲染不连贯                 。

为了解决这个问题         ,利用多核CPU的计算能力      ,允许JS脚本创建多个线程                 ,即同步异步      。

同步任务:

同步任务都在主线程上执行            ,形成一个执行栈         。 前一个任务结束后再去执行下一个任务   ,程序的执行顺序与任务的排列顺序是一致的同步的                 。 比如做饭的同步做法                 ,我们要烧水煮饭               ,等水开了,再去切菜              ,炒菜        。

异步任务:

通过回调函数实现的                  ,异步任务相关回调函数添加到任务队列中(任务队列也称为消息队列)      。

在做一件事的同时   ,还可以去处理其他的事情                  。

比如做饭的异步做法           ,在烧水的同时                  ,利用这段时间      ,去切菜        ,炒菜           。

异步任务分类: 1.普通事件                 ,如click                  、resize等   。 2.资源加载         ,如load      、error等                  。 3.定时器      ,包括setTimeout        、setInterval等              。

同步和异步本质的区别:在这条"流水线"上各个流程的执行顺序不同。

JS执行机制步骤:

由于主线程不断地重复获得任务                 、执行任务         、再获取任务      、再执行                 ,所以这种机制被称为事件循环            ,即event loop               。

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

然后异步任务(回调函数)放任务队列中   。

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

二                 、ES6概述 新增了变量的声明方式            、解构赋值   、模板字符串                 、简化对象写法               、箭头函数、函数形参默认值              、rest参数                  、拓展运算符   、新增数据类型(Set           、Map                  、Symbol      、BigInt)        、promise                 、async/await等                 。 三         、var      、let                 、const的区别 区别 var let const 是否有块级作用域 ❌ ✔ ✔ 是否存在变量提升 ✔ ❌ ❌ 是否添加全局属性 ✔ ❌ ❌ 能否重复声明变量 ✔ ❌ ❌ 是否存在暂时性死区 ❌ ✔ ✔ 是否必须设置初始值 ❌ ❌ ✔ 能否改变指针指向 ✔ ✔ ❌ 四            、箭头函数与普通函数的区别 箭头函数比普通函数更加简洁 如果只有一个参数              ,可以省去参数的括号      。 如果函数体的返回值只有一句                  ,可以省略大括号   ,且必须省略return         。 箭头函数没有自己的this 箭头函数不会创建自己的this           , 所以它没有自己的this                  ,它只会在自己作用域的上一层继承this                 。所以箭头函数中this的指向在它在定义时已经确定了      ,之后不会改变        。 call()   、apply()                 、bind()等方法不能改变箭头函数中this的指向 箭头函数的this指向要么是window        ,要么是它的外层      。 箭头函数不能作为构造函数使用 箭头函数是ES6中的提出来的                 ,它没有prototype         ,也没有自己的this指向      ,更不可以使用arguments参数                 ,所以不能New一个箭头函数;new操作符的实现步骤如下: 1.创建一个对象 2.将构造函数的作用域赋给新对象(也就是将对象的proto属性指向构造函数的prototype属性) 3.指向构造函数中的代码            ,构造函数中的this指向该对象(也就是为这个对象添加属性和方法) 4.返回新的对象   ,所以                 ,上面的第二               、三步               ,箭头函数都是没有办法执行的 箭头函数没有自己的arguments 箭头函数没有自己的arguments对象                  。在箭头函数中访问arguments实际上获得的是它外层函数的arguments值           。 箭头函数没有prototype 箭头函数不能用作Generator函数,不能使用yield关键字 五、箭头函数的this指向 箭头函数不同于传统JavaScript中的函数              ,箭头函数并没有属于⾃⼰的this                  ,它所谓的this是捕获其所在上下⽂的 this 值   ,作为⾃⼰的 this 值           ,并且由于没有属于⾃⼰的this                  ,所以是不会被new调⽤的      ,这个所谓的this也不会被改变   。箭头函数的this指向外层函数的this                  。 六              、扩展运算符的作用及使用场景 对象扩展运算符 对象的扩展运算符(...)用于取出参数对象中的所有可遍历属性        ,拷贝到当前对象之中              。扩展运算符对对象实例的拷贝属于浅拷贝。 数组扩展运算符 数组的扩展运算符可以将一个数组转为用逗号分隔的参数序列                 ,且每次只能展开一层数组               。 七                  、对象与数组的解构 解构是 ES6 提供的一种新的提取数据的模式         ,这种模式能够从对象或数组里有针对性地拿到想要的数值                 。 对象的解构 在解构对象时      ,是以属性的名称为匹配条件                 ,来提取想要的数据的   。 数组的解构 在解构数组时            ,以元素的位置为匹配条件来提取想要的数据的            。 八   、模板语法 允许用${}的方式嵌入变量   ,优势有两个: 在模板字符串中                 ,空格           、缩进                  、换行都会被保留               ,可以识别html代码                 。 模板字符串完全支持“运算            ”式的表达式,可以在${}里完成一些计算      。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
win10系统启动文件夹路径(win10开机启动文件夹路径是什么) 中的list扩充几次(20220930-Vector集合扩容机制源码分析)