自学内容网 自学内容网

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