前端面试题

1.沙箱模式

答:沙箱模式又称沙盒模式,隔离模式。就是将代码和外界隔离,不管里面什么操作,都不会影响到全局变量。
应用:模拟块级作用域;所有的封装的框架都是在沙箱模式里面完成的

2.dom的添加删除修改

答:增加:appendChild()
删除:removeChild()

3.数组的去重的方法有哪些(3种)

答:1.filter()和indexOf()实现去重
2.reduce()和includes()实现去重
3.new Set()实现去重

4.强制类型转换和隐式类型转化的区别

答:1.强制转换:通过string(),Number(),Boolean()函数强制转换
2.隐式转换:js的数据类型分为六种。不同类型的变量比较要先转换类型,叫做类型转换。隐士转换通常发生在运算符加减乘除,等于,小于大于等。比如,字符串+数字,数字就会转成字符串,数字-字符串,如果字符串不是纯数字,就会转成NaN

5.Sting和toSting的区别

答:在js中,他俩都可以将数据转换为字符串类型。
string可以将所有数据都转化为字符串,但是toString()不能对null和undefined进行转换。

6.数字类型的强制数据转换有哪些类型

7.js的事件委托是什么,原理是什么

答:事件委托又称时间代理。是js中常用绑定事件的常用技巧。就是把原本需要绑定在子元素的响应事件委托给父元素,让父元素担当事件监听的职务。事件代理的原理是dom元素的事件冒泡。
原理是将事件监听器注册在父元素上,然后利用事件的冒泡机制在父元素上捕获子元素触发的事件,并进行相应的操作。这样就可以避免在子元素上注册大量的事件监听器,同时也可以降低代码的维护成本和内存应用。
1.在父元素上注册事件监听器,可以使用addEventListener或者jQuery等库提供的事件绑API进行注册。
2.在事件监听器中,可以通过event.target属性获取到触发事件的元素,然后根据元素的特征来判断是否需要进行处理。
3.如果判断出触发事件的元素需要进行处理,可以在事件监听器中执行相应的操作,比如改变元素状态,发送请求等。

8.如何改变函数内部的this指向

答:可以使用call(),bind(),apply()
call()方法:调用call时会将fn中的this指向改为传入的第一个参数,将后面的参数传入给fn,并立即执行函数fn
apply()方法:第一个参数指向的this对象,第二个参数是一个数组,数组里面的元素会被展开传入fn,作为fn的参数。
相同点:三个都是用于改变this指向;接受的第一个参数都是this要指向的对象;都可以利用后续参数传参。
不同点:
call和bind传参相同;call和apply都是对函数进行直接调用,而bind方法不会立即调用函数,而是返回一个修改this后的函数

9.跨域的解决方式

答:1.jsonp:主要是利用了script标签的src属性不受同源策略的影响,通过后端的配合解决。
2.CORS:跨域资源共享,是w3c标准,属于跨源Ajax请求的根本解决方案。
3.webpack本地代理:在webpack.config.js中利用webpackServer配置本地代理
4.websocket:是一个HTML5的一个持久化的协议,实现了浏览器和服务器的全双工通信,websocket的服务器与客户端都能主动向对方发送或接收数据。同时,websocket在建立连接时需要借助HTTP协议,连接建立好了之后client与server之间的双向通信就与HTTP无关了。

10.垃圾回收机制

答:js代码运行时,需要分配内存空间来储存变量和值。当变量不在参与运行时,就需要系统收回被占用的内存空间,这就是垃圾回收。

11.释放内存的机制有几种,具体是怎么释放的?

答:标记清除和引用计数。
标记清除:当变量进入执行环境时,就标记这个变量,被标记的变量是不能回收的,当变量离开环境时,也会被标记,被标记后的变量也会被内存释放。

12.数据是怎么存储的

答:顺序存储方法;链式存储方法;索引存储方法;散列存储方法

13.用一个函数清除字符串前后的空格

答:可以使用 JavaScript 中的 trim 方法来清除字符串前后的空格。trim 方法会返回一个新的字符串,该字符串是去除字符串前后空格后的结果,原字符串并不会发生改变,也可以使用replace和正则的方式来清楚。

14.js实现继承的方式有哪些

答:1.原型链继承。是一种基于原型的继承方式,即子类的原型对象指向父类的实例,从而实现继承。
2.构造函数继承。是一种通过调用父类构造函数来实现继承的方式,就是在子类构造函数内部调用父类构造函数,并把子类实例作为参数传递进去。
3.组合继承:是一种基于原型链继承和构造函数继承结合的继承方式。
4.原型式继承:是一种通过复制父类对象来创建子类对象的继承方式。
5.寄生式继承:是一种在原型式继承的基础上,在子类对象上增加一些新的方法或属性的继承方式。

15.判断一个变量是否是数组

答:通过object.prototype.toString.call()
通过原型链做判断
通过es6的Array.isArray()做判断
通过instanceof做判断
通过Array.prototype.isPrototypeof

16.let const var的区别

答:在这里插入图片描述

17.函数的变量提升

变量提升(Hoisting) 是 JavaScript 中的一个特性,它会在代码执行之前,将变量和函数声明提升到它们所在作用域的顶部。理解变量提升有助于避免由于变量声明位置引发的意外行为。

18.说说什么是闭包函数

闭包(Closure) 是指在 JavaScript 中,函数可以访问其词法作用域(即定义时的作用域)中的变量,即使这个函数在其作用域之外执行。闭包使得一个内部函数能够 “记住” 并访问其定义时的外部函数中的变量,甚至在外部函数已经返回之后,仍然可以继续访问这些变量。

闭包的核心概念:
词法作用域(Lexical Scope):函数的作用域由函数声明的位置决定,而不是函数调用的位置。
作用域链:在嵌套的函数中,内部函数可以访问外部函数的变量,而外部函数无法访问内部函数的变量。
闭包的行为:
当一个内部函数引用了外部函数中的变量时,即使外部函数已经执行完毕,这些变量仍然会被保存在内存中。这就形成了闭包。

19.随机1-10之间的整数 v

20.可以使用随机数生成一个中奖概率吗? v

21.new操作符干了什么

22.promise

23.ajax的原理

24.异步加载js的方式有哪些?
25.模块化开发怎么做
26.常见的web安全和防护
27.xss攻击
28.xml和json的区别
29.js创建对象的几种方式 v
30.js里面有哪些内置的对象
31.为什么要有同源策略 v
32.写js的基本规范(注意事项)
33.js代码中使用严格模式的区别是什么?
答:use strict是一种严格模式,这种模式使得js在更严格34.null和undefined v
35.面向对象编程
36.谈谈你对原型和原型链的理解 v
37.typeof和instanceof的区别 v
38.递归函数
39.谈谈事件委托,事件冒泡,事件捕获的理解
40.如何改变函数内部指向 v
41.什么是变量提升 v
42.说一下作用域链
43.es6有哪些新特性
44.说说你对set和map的理解
45.说一下图片懒加载的原理
46.函数都有哪些种函数
47.部署项目为什么会出现了404的问题
48.如何终止ajax请求
49.说一下深拷贝和前拷贝的区别 v
50.说一下npm,pnpm,yarn的区别
51.二叉树是什么意思
52.怎么预防用户连续快速提交
53.导致页面加载白屏怎么处理
54.十进制怎么转化成二进制 v
55.js如何实现全屏的展示
56.map和foreach,filter的区别
57.promise的all方法
58.如何实现一个轮播图组件
59.说一下settimeout的运行机制
60.说一下…的作用
61.说一下bind绑定多次,它的tihs指向指向谁
62.怎么实现大型文件的上传
63.什么是断点续传和分片上传
64.ajax,axios和fetch的区别
65.谈谈你对低代码的理解
66.如果同时绑定冒泡事件和捕获事件,两者会同时出发吗?先执行哪一个?
67.如果通过js写一个sort
68.排序的方式都有哪些
69.浏览器中标签页的通讯
70.如何判断这个类型是一个数字类型 v
71.移动端的点击延迟是为什么
72.为什么js是一个单线程的
73.什么是可枚举性,不可枚举的有哪些属性
74.如何判断一个对象是不是一个空对象 v
75.实现一个微前端都有哪些技术
76.什么是微前端,到底是做什么的
77.js正则表达式的使用
78.js中Number()、parseInt()和parseFloat()的区别
79.!isNaN的作用 v
80.js中 == 和 === 与object.is()的区别
81.js的原型和原型链
82.js的原型三角关系
83.构造函数,实例化对象,原型对象
84.js的作用域
85.js的内存泄漏
86.怎么理解异步和同步
87.宏任务和微任务
88.手写一个深拷贝的思路
89.数组的方法都有哪些?
90.数组排序的方法
91.数组扁平化
92.数组转化成字符串
93.js的继承
94.js的BOM操作
95.事件绑定的方式和事件留
96.手写一个instanceof
97.谈谈你对箭头函数的理解
98.什么是XSS、CSRF攻击
99.作用域都有什么?
100.数组的扁平化
101.js的dom和bom有哪些?
102.箭头函数和普通函数的区别
103.说一说什么是防抖节流
104.0.1+0.2为什么不等于0.3
105.如何解决settimeout倒计时误差
106.es5的面向对象和es6的面向对象
107.说一下作用域和作用域链
108.js的事件绑定方式有哪几种
109.js的内置对象有什么
110.js的轮询
111.什么是尾递归
112.说说你对模块化规范的理解
113.js动画好还是css动画好
114.点击穿透问题怎么解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值