JavaScript面试常见问题(三)

构造函数中实例对象的new通常会做哪些事情

  • 创建一个空对象
  • 将this指向这个空对象
  • 利用this在对象内添加属性和方法并执行代码
  • 自动return this创建好的对象

什么是原型对象和原型链

  • 原型对象是通过构造函数创造出来的实例对象 都可以共享访问到原型对象的方法或者属性
  • 原型链指的是实例对象通过 __proto__从下往上来一层一层寻找自己的链式关系,就是原型链 作用是可以查看实例对象有哪些属性和方法

实例对象属性的访问规则是什么

  1. 先在自己身上找,有就用自己的
  2. 如果没有则往上找原型对象的

函数中this的指向

  • 默认绑定指向window(普通函数、定时器、延时器)
  • 隐式绑定指向调用者(let obj = {fn:function(){console.log(this)}}(this指向obj)、事件处理函数)
  • new绑定指向new的实例对象 (function Person() { console.log(this)} let p = new Person())(new指向p)
  • 硬绑定:想让this指向谁,就指向谁
  • call 调用函数并且改变this
  • apply 调用函数并且改变this (数组形式 )
  • bind:返回一个新函数,并且规定死了该新函数的this指向

什么叫递归函数

递归函数指的是一个函数自调用 并且函数内有结束该函数的条件,这样的函数叫做递归函数

什么叫闭包

闭包指的是内层函数内调用外层函数内的变量

如何释放闭包空间

外层函数调用赋值为null即可

什么叫浅拷贝和深拷贝?区别是什么

  • 浅拷贝指的是对象中对象A需要用到对象B的属性,那么可以将对象B的属性利用for in语句来进行遍历,将需要的属性赋值给对象A,这个过程叫做浅拷贝
  • 深拷贝指的是对象中对象A需要用到对象B的属性和方法,那么可以利用递归函数封装函数并且自调用的特点,将对象B的属性利用for in语句来进行多次遍历,将需要的属性、方法赋值给对象A,这个过程叫做深拷贝
  • 区别:
  • 浅拷贝只可以拷贝简单数据类型(堆内存),对于复杂数据类型只拷贝内存中的堆内存,而栈内存不会拷贝
  • 深拷贝不仅可以拷贝简单数据类型(堆内存),还可以拷贝复杂数据类型(栈内存)

var、let、const的区别

  • var没有块级作用域、存在声明提升、可以先使用再声明、可以重复声明、在全局作用域下声明会被挂载到window

  • let和const存在块级作用域、不存在声明提升,必须先声明,后使用,不允许重复声明

  • const只能声明常量,必须有初始值

  • var和let可以声明变量和常量

  • let比var的优点:

​ 1、let 有块级作用域

​ 2、let 不会挂载到window上

​ 3、let 必须先声明,后使用

​ 4、let 不允许重复声明

箭头函数中this的指向

箭头函数中没有自己的this,如果在箭头函数中访问this,它会一层一层的往上找离它最近的this指向

什么情况下用箭头函数

  • 定时器、延时器
  • 数组的新语法相关操作

箭头函数中可以用arguments吗

不能,在箭头函数中没有arguments,如果需要获取到箭头函数中的值,可以用rest语法,来让箭头函数中的实参以数组的形式展现出来,具体写法为(…rest)=>{}

箭头函数在哪些情况下可以简写

  1. 形参为1个时可以不用写包裹形参的小括号
  2. 如果函数内代码只有一句话时,大括号也可以省略
  3. 如果函数体省略时,会自动return返回值,所以return也不用写

数组去重的方法

const arr = [1,2,3,1,2,3,4,2,5,2,6,4]
const set = new Set(arr)
console.log([...set])  // [1,2,3,4,5,6]
// 一行写出数组去重
console.log([...new Set(arr)]) // [1,2,3,4,5,6]

什么是js的垃圾回收机制

js的垃圾回收机制是浏览器的一种机制,简单来说就是js中的每个代码都会有一个生命周期,这个生命周期包括内存分配、内存使用内存回收三个阶段,在打开一个网页时,浏览器会预解析当前的js代码,如果解析到某行代码声明的变量、函数、对象等下边用不到这些声明的东西,那么它会自动的将这些东西进行回收,来减轻内存空间的容量同时防止内存泄漏,全局变量需要我们手动清除,清除的方法就是将它赋值为null

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A Lucky Boy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值