JavaScript 面试题

目录

1. JS的数据类型(常问)

2. 双等和三等的区别

3. let、 const、 var 区别

4. 闭包 (常问)

5. 作用域 和作用域链 (常问)

6.什么是模块化

7. js 继承 原型 原型链 (常问)

8.事件代理

9. 事件模型

10. 事件的循环机制

11. 事件防抖和节流

12. This的指向 (常问)

call、apply、bind的区别​编辑

13. new 命令操作干了什么?(常问)

14. 箭头函数与普通函数的区别?

15.如何通过js 判断一个数组

16. 数组有哪些方法? (常问)

17. Map()与forEach()的区别

18. for in 对比 for of区别

19.数组排序

20.数据的转换

21.js浅拷贝与深拷贝

22.同步与异步的区别

23.script中async和defer有什么区别

24. ajax、axios、fetch区别


1. JS的数据类型(常问)

分类:

        基本数据类型有:number、string、boolean、null、undefined。

        引用数据类型有:array、function等(除了基本数据类型都是引用数据类型)

赋值方式:

        基本数据类型 赋值方式是传值,值存储在栈中。

        引用数据类型 赋值方式是传址,值存储在堆中。

判断数据类型的方法:    

        typeof() 判断基本数据类型 (string ,number,boolean,)

        instanceof() 判断引用数据类型 (arry, function)

        constructor 基本数据类型和引用数据类型,声明构造函数并指向array

        object.prototype.tostring.call() 支持所有类型

2. 双等和三等的区别

‘== ’是的比较, ‘=== ’是类型 的比较

== 仅对比值是否相等,值相等即可,无需比较类型。

===先对比数据的类型,再对比是否相等。

3. let、 const、 var 区别

var: 存在变量提升,可以先去声明再去使用;一个变量可重复声明,后面的声明会覆盖前面的声明。

const: const声明一个只读的变量,声明后,值就不能改变。

let: 不存在变量提升,let 变量未声明前,该变量不能使用,否则报错。

4. 闭包 (常问)

概念:函数内部嵌套一个函数就是闭包,内部函数可访问外部函数的 变量。

特点:

        函数套函数

        内部函数可以引用 外层函数的 参数和变量

        参数和变量不会被垃圾回收机制回收

用处 :

        使用闭包,是为了设计私有变量和方法

        读取函数内部变量,让变量始终保持在内存中

        能实现封装 和 缓存

优点:可以避免全局变量的污染

缺点:是常驻内存,增大内存占用,使用不当会造成内存溢出

*使用闭包注意事项:

使用闭包,使函数的变量被保存在内存中,内存消耗大,乱用会影响网页性能,ie 中会导致内存泄漏。

解决方案: 在函数退出之前将不使用的局部变量全部清除(清除方法:将变量设置为null)

5. 作用域 和作用域链 (常问)

作用域:当前的执行上下文,值和表达式在其中“可见”或可被访问。作用域最大的用处就是隔离变量,不同作用域下的同名变量不会有冲突。

作用域链:当访问变量时,自己的作用域中没有,一层一层向上寻找,直到找到全局作用域还是没找到,就宣布放弃,这种一层一层的关系,就是作用域链。

作用域包括:

        全局作用域 :全局的变量 ,任何地方都可以被访问

        函数作用域:函数内部可以访问

        块级作用域: 可通过 letconst 声明, 所声明的变量在指定块的作用域下可以访问, 块外无法访问。

延伸:

6.什么是模块化

模块化 是将复杂的系统划分成独立功能的方法,模块可以组合、分解、更换 (也可以说 一个js文件中可以引入另外一个js文件的数据)

模块化好处:提高了代码的 复用性、可维护性、可按需加载

模块化规范:???

7. js 继承 原型 原型链 (常问)

继承 : 父类拥有的属性 方法,子类也都有,子类通过 super传入参数调用父类构造函数 。

原型:每个对象都有一个属性_proto_这个属性就是原型

原型链: 当我们访问一个对象的成员(属性或者方法)时,

                会先在自身上找 ,

                如果自身上没有,就去它的原型(_proto_上去找,

                如果原型也没有,就会访问原型(_proto_)的原型(prototype),直到原型链的终点 null。

注意⚠️:如果还没有,此时属性就会获取 undefined,方法就会报错 xxx is not a function。一般原型链主要是用来实现面向对象继承的。

关系 : 类Student的 实例对象student 的原型_proto_ 和类Student的原型prototype是一样的

Student.prototype(显式原型) === student._proto_(隐式原型) 返回true

8.事件代理

概念 :是js 中常用的一种事件绑定技巧,就是把自身需要的事件 绑定到它的父元素,让父元素负责事件监听。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值