JS面试题|[2024-12-28]
1.JS的设计原理是什么?
JS引擎 运行上下文 调用栈 事件循环 回调
执行流程:
JS引擎将代码解析为电脑可以执行的代码,调用一些API(运行上下文)让浏览器执行
JS是单线程的,每次从调用栈里面取出来的代码进行调用,如果执行非常耗时就会阻塞线程,导致浏览器卡顿,回调函数通过加入事件队列里,等待事件循环后,放入调用栈执行
事件循环监听到调用栈为空时,才会从事件队列里拿出任务,放入调用栈继续执行
2.JS中关于this指向的问题
1.全局对象中的this指向的问题
指向的是window
2.全局作用域或普通函数中的this
指向全局window
3.this永远指向最后调用它的那个对象
在不是箭头函数的情况下
4.new 关键字修改了this的指向
5.apply、call、bind
可以改变this指向,不是箭头函数
6.箭头函数中的this
它的指向在定义的时候就已经确定了
箭头函数ta没有this,看外层是否有函数,有就是外层函数的this,没有就是window
7.匿名函数中的this
永远指向了window,匿名函数的执行环境具有全局性,因此this指向window
3.script标签里的async和defer有什么区别
当没有async和defer这两个属性的时候:
浏览器会立即加载并执行指定的脚本
有async:
加载和渲染后面元素的过程将和script的加载和执行并行进行(异步)
有defer:
加载和渲染后面元素的过程将和script的加载并行进行(异步),但是它的执行事件要等到所有元素解析完成之后才会执行
4.setTimeout最小执行时间是多少
HTML5规定的内容:
setTimeout最小执行时间是4ms
setInterval最小执行时间是10ms
执行时间小于规定,按照规定计算
不同浏览器规定可能会不同
5.ES6和ES5有什么区别
JS的组成:ECMAScript、BOM、DOM
ES5:ECMAScript5,2009年ECMAScript的第五次修订,ECMAScript2009
ES6:ECMAScript6,2025年ECMAScript的第六次修订,ECMAScript2015,是JS的下一个版本标准
6.ES6的新特性有哪些
1.新增块级作用域(let、const)
不存在变量提升
存在暂时性死区的问题
块级作用域的内容
不能在同一个作用域内重复声明
2.新增了定义类的语法糖(class)
3.新增了一种基本数据类型(symbol)
定义独一无二的值,不能用new关键字
4.新增了解构赋值
从数组或者对象中取值,然后给变量赋值
5.新增了函数参数的默认值
6.给数组新增了API
7.对象和数组新增了扩展运算符
8.Promise
解决一些异步的计算,解决回调地狱的问题。
自身有call、reject、resolve、race方法
原型上有then、catch
把异步操作队列化
三种状态:pending(初始状态),fulfilled(操作成功),rejected(操作失败)
状态转变:pending -> fulfilled;pending ->rejected 一旦发生,状态就会凝固,不会再变
async await:
同步代码做异步的操作,两者必须搭配使用
async表明函数内有异步操作,调用函数会返回Promise
await是组成async的表达式,结果是取决于它等待的内容,如果是promise那就
是promise的结果,如果是普通函数就进行链式调用
await后的promise如果是reject状态,那么整个async函数就会中断,后面的代码
不执行
9.新增了模块化(import、export)
10.新增了set和map数据结构
set是不重复
map的key的类型不受限制
11.新增了generator
12.新增了箭头函数
不能作为构造函数使用,不能用new,箭头函数就没有原型
箭头函数没有arguments
箭头函数不能用call、apply、bind去改变this的执行
this指向最外层第一个函数的this
原文地址:https://blog.csdn.net/m0_49474690/article/details/144795451
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!