| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> JavaScript最全面试题 -> 正文阅读 |
|
[JavaScript知识库]JavaScript最全面试题 |
1.闭包什么是闭包?
MDN
的解释:闭包是函数和声明该函数的词法环境的组合。
按照我的理解就是:闭包
=
『函数』和『函数体内可访问的变量总和』
说白了就是函数嵌套函数,内部函数能够访问外部函数的变量
闭包的作用
闭包最大的作用就是隐藏变量,闭包的一大特性就是
内部函数总是可以访问其所在的外部函数
中声明的参数和变量,即使在其外部函数被返回(寿命终结)了之后
基于此特性,
JavaScript
可以实现私有变量、特权变量、储存变量等
我们就以私有变量举例,私有变量的实现方法很多,有靠约定的(变量名前加
_
)
,
有靠
Proxy
代理的,也有靠
Symbol
这种新数据类型的。
闭包的优点
可以隔离作用域,不造成全局污染
闭包的缺点
由于闭包长期驻留内存,则长期这样会导致内存泄露
如何解决内存泄露:将暴露全外部的闭包变量置为
null
适用场景
封装组件,
for
循环和定时器结合使用
,for
循环和
dom
事件结合
.
可以在性能优化的过程
中
,
节流防抖函数的使用
,
导航栏获取下标的使用
2.谈谈你对原型链的理解?原型对象
绝大部分的函数(少数内建函数除外)都有一个
prototype 属性,这个属性是原型对象用来创建新对象实例,而所有被创建的对象都会共享原型对象,因此这些对象便可以访问原型对象的属性
原型链原因是每个对象都有? 3.说一下JS继承(含ES6的)
JS
继承实现方式也很多,主要分
ES5
和
ES6
继承的实现
先说一下
ES5
是如何实现继承的
ES5
实现继承主要是基于
prototype
来实现的,具体有三种方法
一是
原型链继承
:即
B.prototype=new A()
二是借
用构造函数继承
(call
或者
apply
的方式继承
)
三
是组合继承
4.说一下JS原生事件如何绑定
JS
原生绑定事件主要为三种:
一是
html
事件处理程序
二是
DOM0
级事件处理程序
三是
DOM2
级事件处理程序
html
事件现在早已不用了,就是在
html
各种标签上直接添加事件,类似于
css
的行内样
式,缺点是不好维护,因为散落在标签中
,
也就是耦合度太高
5.说一下JS原生常用dom操作方法?查找:
getElementByid,
getElementsByTagName,
querySelector,
querySelectorAll
插入:
appendChild,insertBefore
删除:
removeChild
克隆:
cloneNode
设置和获取属性:
setAttribute(“
属性名
”,”
值
”)
getAttibute(“
属性名
”)
6.说一下ES6新增特性?
1.
新增了块级作用域
(let,const)
2.
提供了定义类的语法糖
(class)
3.
新增了一种基本数据类型
(Symbol)
4.
新增了变量的解构赋值
5.
函数参数允许设置默认值,引入了
rest
参数,新增了箭头函数
6.
数组新增了一些
API
,如
isArray / from / of
方法
;
数组实例新增了
entries()
,
keys()
和
values()
等
方法
7.
对象和数组新增了扩展运算符
8. ES6
新增了模块化
(import/export)
9. ES6
新增了
Set
和
Map
数据结构
10. ES6
原生提供
Proxy
构造函数,用来生成
Proxy
实例
11. ES6
新增了生成器
(Generator)
和遍历器
(Iterator)
7.JS设计模式有哪些(单例模式观察者模式等)
JS
设计模式有很多,但我知道的有单例模式,观察者模式
单例模式:
就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果
不存在就创建了再返回,这就确保了一个类只有一个实例对象。在
JavaScript
里,单例作为一个命
名空间提供者,从全局命名空间里提供一个唯一的访问点来访问该对象。
观察者模式
:
观察者的使用场合就是:当一个对象的改变需要同时改变其它对象,并且它不知道具体有多少对象
需要改变的时候,就应该考虑使用观察者模式。
总的来说,观察者模式所做的工作就是在解耦,让耦合的双方都依赖于抽象,而不是依赖于具体。从而 使得各自的变化都不会影响到另一边的变化
8.说一下你对JS面试对象的理解 ?
JS
面向对象主要基于
function
来实现的,通过
function
来模拟类,通过
prototype
来实现类方法的共享, 跟其他语言有着本质的不同,自从有了ES6
后,把面向对象类的实现更像后端语言的实现了,通过
class 来定义类,通过extends
来继承父类,其实
ES6
类的实现本质上是一个语法糖,不过对于开发简单了好多
9.说一下JS数组常用方法(至少6个)
1. Array.push(),向数组的末尾添加一个或多个元素,并返回新的数组长度。原数组改变
2. Array.pop(),删除并返回数组的最后一个元素,若该数组为空,则返回undefined。原数组改变
3. Array.unshift(),向数组的开头添加一个或多个元素,并返回新的数组长度。原数组改变。
4. Array.shift(),删除数组的第一项,并返回第一个元素的值。若该数组为空,则返回undefined。原数组改变。
5. Array.concat(arr1,arr2…),合并两个或多个数组,生成一个新的数组。原数组不变。
6. Array.join(),将数组的每一项用指定字符连接形成一个字符串。默认连接字符为 “,” 逗号。
7. Array.reverse(),将数组倒序。原数组改变。
8. Array.sort(),对数组元素进行排序。按照字符串UniCode码排序,原数组改变。
9.Array.map(function),原数组的每一项执行函数后,返回一个新的数组。原数组不变。(注意该方法和forEach的区别)。
10.Array.slice() 按照条件查找出其中的部分内容
11.Array.splice(index,howmany,arr1,arr2…) ,用于添加或删除数组中的元素。从index位置开始删除howmany个元素,并将arr1、arr2…数据从index位置依次插入。howmany为0时,则不删除元素。原数组改变。
12.Array.forEach(function),用于调用数组的每个元素,并将元素传递给回调函数。原数组不变。(注意该方法和map的区别,若直接打印Array.forEach,结果为undefined)。
13.Array.filter(function),过滤数组中,符合条件的元素并返回一个新的数组
14.Array.every(function),对数组中的每一项进行判断,若都符合则返回true,否则返回false。
15.Array.some(function),对数组中的每一项进行判断,若都不符合则返回false,否则返回true。
16.Array.reduce(function),reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
17.indexOf() 检测当前值在数组中第一次出现的位置索引
原数组改变的方法有:push pop shift unshift reverse sort splice forEach
|
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 17:02:10- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |