面试总结归纳 #2

1.创建function有集中方式?
答:三种
	1.声明方式创建function函数名 会被声明提前 
	2.赋值方式创建var函数名=function 不会被声明提前  
	3.var 函数名=new funciotn()  揭露了一切函数都是一个保存代码段的引用类型对象的被指
2.什么是声明提前?存在什么问题?
答:在程序开始执行时候,JS引擎会扫描程序中的varfunction,提前到当前作用域的顶部集中创建,赋值留在原地,问题:会破坏程序执行的顺序
3.重载是什么?
答:相同函数名,不同形参,调用时,可根据实参不同,动态选择函数调用 arguments函数中自带,类数组对象,判断长度
4.为什么要用匿名函数?匿名函数的使用场景?
答:节约内存,用完自动释放,防止污染全局,使用场景:回调函数,JS函数包裹在匿名函数内调用
5.讲一讲你理解的全局作用域和函数作用域?
答:就是一个变量的可用范围,分为两种,全局作用域保存全局变量,本质是window对象,可以反复使用同一个变量,容易被污染全局,函数作用域保存函数内部使用的变量,不可以重用,但不会不然全局
6.函数的执行过程是什么?
答:定义函数,调用时,先创建函数作用域,创建函数所需要的变量,执行语句,只要函数内有要用的变量,就会优先使用内部的,只有内部没有这个变量,才会去全局作用域查找
7.讲讲作用域链?
答:每个函数对象身上带的,表村这个函数可以访问的所有作用域的集合,作用域链保存了一个函数的可用的所有变量,就近控制使用顺序如果作用域中没有要用的变量,就去全局查找
8.闭包是什么?
答:反复使用一个变量,又保护变量不被污染,外层函数包裹要保护的变量和内层函数,此时函数内部的变量已经成了局部函数,return出内层函数发送到函数外部,调用外层函数既不会造成全局污染,变量又可以达到重用
9.闭包的原理是什么?缺点又是什么?
答:原理:外层函数调用后,因为外层函数的作用域对象被内层函数引用这,无法释放,形成了闭包,缺点:比普通函数多占用一块内存,如果闭包不再使用,保存内层函数的变量=null
10.面向对象是什么?有什么特点?
答:描述事物的属性和方法,按照调用对象中保存属性和方法,便于大量数据的管理和使用特点:封装,继承,多态
11.如何封装一个对象?
答:1.{}创建一个对象
	2.new Object()创建一个对象 揭露了一切对象底层都是管理数组
 	3.好的方法:构造函数 function类型名()  new 类型名 
12.构造函数中的new 做了些什么?
答:1.创建空对象
	2.自动设置新创建的子对象继承构造函数的原型对象
	3.调用构造函数,自动将构造函数this指向当前对象
	4.返回对象地址保存到变量中
13.this的指向有哪些?
答:1.全局环境this指向window
	2.函数作用域中非严格模式this还指向window
	3.严格模式this指向undefined
	4.构造函数this 指向 new
	5.定时器this指向window
	6.元素绑定事件触发后,this指向当前元素
	7.对象中调用的方法,谁调用this指谁
14.浅克隆对象和深克隆
答:浅克隆:定义克隆函数,函数里创建一个空对象,in遍历需要克隆对象的属性,每遍历一个属性,就给新对象添加同名属性,return新对象 
	深克隆:把一个对象转为json对象,在赋给克隆对象
15.继承是什么?
答:父对象的成员,子对象无需重复创建,就可以使用,原型对象就是保存一个类型所有子对象共有成员的父对象,用构造函数.prototype来访问原型对象,
new自动设置新的子对象继承构造函数的原型对象,只要子对象的__proto__属性指向了父对象,子对象就可以直接使用父对象的成员
16.自有属性和共有属性是什么?
答:自有属性就是直接保存在对象内部,归当前内部独有的属性,共有属性保存在原型对象中,归所有子对象共有属性
17.内置类型的原型对象有哪些?
答:ECMA标准中,浏览器已经实现的,string,number,bool,array,date,regexp,math,error,function,object,golbal除了math和global 其他九种都是构造函数和原型对象组成
18.原型链?
答:多级父对象逐级形成的链式结构,保存着对象的所有属性和方法,如果没在原型链上的属性和方法,这个对象就无法使用,控制属性和方法的使用顺序就近原则,如果访问一个属性或者方法,自身内部没有,就会沿着原型链逐级向上查找
19.自定义继承怎么实现?
答:如果整个原型对象都不是想要的,想换成新的原型对象时,子对象.__proto__=新父对象,也可以object.setPrototype(子对象,新父对象)
20.ES5都有哪些特性?
答:严格模式,保护对象,访问器属性,保护对象结构,create,替换this,增加了数组函数,遍历,过滤,汇总
21.严格模式怎么用?有哪些特点
答:在当前作用域顶部添加use strict ,禁止给未声明的变量赋值,静默失败升级为错误,普通函数this指向undefined,禁止使用arguments.callee递归
22.保护对象是什么?怎么实现?
答:对象本身没有自保能力,ES5标准开始,对象就是一个微缩的小对象,用Object.definePropertys来控制对象修改,遍历,删除的开关,但是设定开关只存在开启和关闭,没有灵活的编写自定义规则,所以会用访问器属性
23.谈谈访问器属性?
答:访问器属性自己不存值,而是提供对一个属性的特殊保护,先将要保存的值半隐藏,访问器属性名字要和使用的属性名字一致,才能起到顶替作用,get()获取操作,set()修改操作,当程序视图获取属性时,会地洞调用访问器属性的get()方法,get会自动去受保护半隐藏属性中获取当前的属性,返回给调用者,当程序视图修改属性时,会自动调用访问器属性的set方法,自动将新值传递给形参value变量,set内部验证是否符合要求,如果通过,set会把value的新值保存到受保护的半隐藏属性中,验证不通过,set不会保存value新值,也会报错
24.保护对象结构?
答:虽然可以保护现有的属性,但是无法阻止对象结构的破坏,比如随意添加新属性,增加了防拓展禁止添加新属性object.preventExtensions ,密封 既禁止添加新属性,又禁止删除现有属性 object.seal  冻结,既禁止添加删除,又禁止修改object.freeze
25.讲一讲object.create()
答:专门用于没有构造函数的情况下,也可以创建子对象继承父对象,object.create()在括号里面第一个参数给父对象,也可以在后面给给新对象添加自有属性,保护对象
26.替换this的三种方法?
答:call apply bind 
	1.call是临时替换函数中的this为call中第一个实参值对象,将call第二个实参值后面所有的实参传给正在调用的函数作为实参
	2.apply也是临时替换,因为传入的值很可能放在一个数组中,es5提供了既能替换this,又能打散数组的apply 比call多做了打散数组,分别传入实参值
	3.bind永久绑定,原来函数.bind括号里要替换的this对象,基于原函数,创建一个一摸一样的副本,把新韩淑副本的this永久替换为指定对象
27.es5的数组函?
答:1.every 判断数组是否都符合条件,第一个参数代表当前元素,当前下标,当前数组,原理every自带for遍历,每遍历到元素自动执行回调函数
	2.some  判断数组是否包含符合条件的元素,第一个参数代表当前元素,当前下标,当前数组,自带for遍历
28.es5遍历?
答:1.forEach 自带for循环,遍历数组中每个元素,每遍历到一个和会执行一次回调函数,传入三个值,接住正在遍历到的元素值,下标,整个数组对象
	2.map基于原数组,修改后生成一个新数组,原数组保持不变,也是三个值:当前元素,位置,数组
29.过滤是什么?
答:复制出数组中符合要求的元素组成新的数组,声明新数组等于原来的数组.filter回调函数里三个值,当前元素,位置,当前输入,return出判断条件
30.汇总?
答:对数组所有元素进行统一,得出一个最后的结论,声明变量等于数组.reduce,回调函数里面的值,临时汇总值,当前元素,当前位置,当前数组,return,将元素值累加到临时汇总上
31.数组去重的方法?
答:1.for嵌套for,然后splice去重复,双层循环,外层循环元素,内层循环时比较值,值相同,就删掉
	2.indexof 新建空数组,for循环原数组,判断结果数组是否存在当前元素,如果有相同就跳过-1,不相同则push进数组
	3.sort  利用sort()排序,然后根据排序后的结果进行遍历及相邻元素比对
	4.filter 当前元素,在原始数组中的第一个索引值,否则返回当前元素
	5.[...newSet(arr)] ES6
32.ES6的特性都有哪些?
答:模板字符串,let,箭头函数,forof,参数增强,解构,class,promise等...
33.let,var,const 区别?
答:var声明变量存在提升,letconst不存在变量提升,let,const都是块级作用域,同一作用域letconst不能声明同名变量
34.箭头函数的特性?
答:需要回调函数内的this和外部保持一直,我们用箭头函数,去掉function如果()只有一个变量,可以省略(),{}只有一句话可以省略,但不能加return
35.forof遍历?
答:for循环可以遍历数组和对象,但不够简化,forEach()可以简化,单只能遍历索引数组,es6提供了forof统一了for和each的优缺点
36.参数增强有哪几种?
答:参数默认值,剩余参数,打散数组
37.剩余参数?
答:我们遇到的参数不确定会用到arguments,在es6语法中,如果有不确定的参数,在参数列表使用...数组名
38.打散数组?
答:如果函数需要多个实参,但是实参都放在数组中,出现不一致,apply可以解决,但是apply的本质是替换this,es6打散数组操作,Math.max(...数组)
39....有哪些用法?
答:克隆对象,克隆数组,合并两个数组,合并两个对象
40.几种解构方式?
答:1.数组解构,从一个大数组中提取出个别成员单独使用,中括号里变量等于数组,每个元素位置上都放一个准备接收的数组元素值
	2.对象解构,从对象中提取个别成员,大括号,属性名等于对象
	3.参数解构,多个实参不确定有没有,而且还要求每个实参与形参对应,实参里加上大括号,属性名:形参1=默认值,但是在函数调用时,也要写上大括号
41.为什么用class?什么?
答:因为箭头函数不能用作构造函数,不能new调用,JS中构造函数和原型对象同属一家,但是却分开写,class专门保存一个类型的构造函数和原型对象的结构,class包裹以前的构造函数和方法, 构造函数名字提升class名字,所有构造函数更名constructor,所有直接包含在class,默认就存在原型对象中
42.class之间如何继承?
答:额外创建一个公共的class 集中保存子类型class相同部分功能,使用extends让子类型class继承父类型class
43.谈一谈promise?
答:主要解决异步对象按顺序执行的问题 首先异步对象在主程序外执行 无法保证执行顺序 若想要按顺序执行 只能用传统的回调函数执行 但会形成
回调地狱 回调地狱主要是因为回调函数的多层嵌套形成的只要希望解决异步执行顺序就要用new promise   创建new promise(function(door,err){原来异步函数代码}) 
包裹异步函数执行的所以内容 door(可以传参 )是一个开门函数 写在异步函数的最后一步 将newpromise return出去 和下一个任务对接 调用promise
函数并链接下一个任务 前一个函数.then(下一个任务)  在执行的最后.catch(回调函数)抛出错误 如果在执行过程中有一步处理错误 则退出执行 
44.window对象?
答:代替ES中golbal,充当全局作用域,可以获取当前窗口大小,关闭窗口,也可以打开链接
45.location对象?
答:保存当前窗口正在打开的url的信息的对象。并且location还提供了有些执行跳转操作的函数
46.navigator?
答:专门保存当前浏览器配置信息的对象 希望获得浏览器的配置信息时
47.事件监听是什么?
答:HTML写入事件不便于维护,JS写入事件无法添加多个事件,会形成覆盖,所有要添加事件监听,addeventlistener保存元素对象,事件名,事件处理函数,将新创建的事件监听对象添加到监听队列中,当元素发生事件时,浏览器先在元素自身查找事件处理函数,而后去监听队列中去找,removeeventlistener移除事件监听对象
48.事件模型是什么?
答:从触发事件开始,到所有事件处理函数执行完,所经历的过程,三个阶段:捕获阶段遍历当前元素各级父元素记录事件处理函数,目标触发target优先触发目标元素上的事件,冒泡从元素开始由内向外,一次触发事件处理函数
49.事件对象是什么?
答:事件发生时,浏览器自动创建,保存事件信息的对象,想获得事件相关信息,改变事件模型的行为时使用,事件对象作为事件处理函数的第一个实参值自动传入
50.事件委托?
答:多个平级子元素都要绑定一个时间时,我们只要在父元素上定义一次即可,就可以让所有子元素通过冒泡机制共用父元素的事件处理函数,因为无法使用this获得当前目标了,所以我们会用到事件对象中的target属性
51.事件冒泡?
答:当一个元素接收到事件的时候 会把他接收到的事件传给自己的父级,一直到window 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值