JavaScript无论什么时候都不要把自己当一回事,(inkunzhang)要把自己做的事情当一回事。要经得住诱惑,耐得住寂寞。

01.javascript高级面试汇总

1.说说你对面向对象的理解?
面向对象是一种注重结果的思维方式
面向对象 :封装,继承
2.原型对象是来解决什么问题的?

内存浪费+变量污染

3.原型对象,构造函数和实例对象三者的关系(三个属性)?
构造函数:prototype指向原型对象
原型对象:constructor指向构造函数
实例对象:proto指向原型对象
4.js是通过什么来实现面向对象继承的?

原型链

5.说说静态成员什么是实例成员?
静态成员:函数自己的成员
实例成员:实例对象的成员
6.说说你对js中的this指向理解?
调我我就指向谁
函数名():指向window
对象名.函数名():指向这个对象
new 函数名():new创建的实例
7.请说说call apply bind的区别及对应应用场景?
js基础
传参方式不同call是单个传参,apply是数组、伪数组传参
执行机制不同 : call和aplly会立即执行, bind不会立即执行而是得到一个修改this的新函数
js高级
共同点: 都可以修改this ,第一个参数都是修改this
不同点: 传参不同: call是逐一传参,apply是数组/伪数组传参
函数名.call(修改的this,参数1,参数2…)
函数名.apply(修改的this,数组/伪数组)
call和aplly会立即执行, bind不会立即执行而是(而是返回一个修改的this之后的新函数)得到一个修改this的新函数
8.请说说闭包是什么?

  • 闭包 是 一个 可以访问其他函数内部变量函数
  • 函数 + 上下文引用

9.请说说闭包是干什么用的?

  • 解决变量污染

10.请说说什么是递归函数?

  • 递归函数 是一个 在函数内部调用自己函数

11.请说说递归函数的应用场景

  • 浅拷贝拷贝地址 得到的= 变>(原数据改变) 和 得到的=变> (原数据不变) 深拷贝数据
  • 遍历dom树

12.请说说数组几个常用的迭代方法(遍历方法)
筛选数组: arr.filter()
检测是否所有元素满足条件(开关法) : arr.every()
遍历数组 : arr.forEach()
数组叠加(求累加和) : arr.reduce()

02.webapi

(1).事件委托面试点

事件三要素:事件源   事件类型   事件处理函数                事件流三要素    事件捕获  事件目标  事件冒泡

1.什么是事件委托

给父元素注册事件,委托给子元素处理

2.事件委托原理

事件冒泡

3.事件委托注意点

this指向父元素
e.target指向触发事件的子元素

4.事件委托场景: 给动态新增元素注册委托事件
(2)localStorage硬盘储存与sessionStorage内存储存 区别
1.相同点:
作用一致::用于储存数据
都是只能存储字符串类型数据(上线5MB)
2.不同点:
localStorage :硬盘储存 (永久储存,页面关闭还在,存在硬盘)
sessionStorage:内存储存 (临时存储,页面关闭了就消失)
3.localStorage与sessionStorage如何存储引用类型数据)(数组和对象)转JSON存储

json -> js :   let jsObj = JSON.parse( json格式 )
js -> json :   let jsonStr = JSON.stringify( js对象 )

js高级

(1)new关键字做了那些事情
1.创建空对象
2.this指向这个对象
3.对象赋值
4.返回实例对象
(2)原型链相关
1.原型链作用: 面向对象继承
2.对象访问原型链的规则 : 就近原则
先访问自己,自己没有找原型,原型没有找原型的原型,直到原型链的终点
如果还没找到,属性则获取undefined ,方法则报错xxx is not defined
(3)如何判断数据类型
typeof有两种数据类型无法检测,null,array (数组)
Object.protoype.toString.call(数据)
(4)闭包
(天天用 网页回调都是 js中闭包是无处不在的)
1.闭包是什么 :
闭包 是 使用其他函数内部变量的 函数 (闭包 = 函数 + 其他函数内部变量)
闭包 = 函数 + 上下文引用
2.闭包作用 : 解决全局变量污染
(5)递归及应用场景(循环用的多 循环麻烦的时候用递归)
1.递归 : 在函数内部调用自己
2.递归作用 :
浅拷贝与深拷贝
遍历dom树
(6) 浅拷贝与深拷贝
1.浅拷贝:拷贝地址, 修改拷贝后的数据原数据也会变化
2.深拷贝:拷贝数据, 修改拷贝后的数据原数据不会变化

推荐 json :  let obj = JSON.parse( JSON.stringify( 对象 ) )

递归

(7)数组常用迭代方法 * 详解回顾js语法

 1.数组map方法作用:  映射数组 

(添加(数组里面有标签)字符串(join)到DOM树)

说人话:按照某种映射关系, 把数组的每一个元素给修改了

2.数组filter方法作用:  筛选数组

应用场景: 筛选数组,将符合条件的元素放入新数组中 举例: 找出数组中所有大于10的元素

 3.数组forEach方法作用:  遍历数组

 应用场景:for(let i=0;i<arr.length;i++){
    
    } 功能一致

 /* 逻辑||或一真则真

4. 数组some方法作用:  判断数组中是否有符合条件的元素

 应用场景:  非空判断(判断多个表单元素,有没有空文本)举例 : 判断数组中有没有负数

 /* 逻辑与&&  一假都假

5.数组every方法作用:  判断数组中 是否所有的 元素都满足条件

应用场景:  开关思想 (购物车全选框) 举例 : 判断数组中是不是都是正数

6.数组findIndex方法作用:  查找元素的下标

​     \* 数组的findIndex与indexOf异同点

相同点:功能一致,都是查找元素下标。 有则返回下标,无则返回固定值-1

不同点:应用场景不同

indexOf : 查找数组中的元素都是值类型

findIndex : 查找数组中的元素都是引用类型

7.数组reduce方法 :  数组累加器方法

对数组每一个元素执行一次回调函数,累加最后一次回调的结果 

reduce场景: 数组元素求和、求数组元素最大值

猜你喜欢

转载自blog.csdn.net/qq_43944285/article/details/124482952