JavaScript基础面试(1)

js **
1、闭包问题?
“闭包就是
能够读取其他函数**内部变量的函数;只有函数内部的子函数才能`读取局部变量;
例如:常见闭包

function fn(){ 
	var a =1 ,b = 2;
funciton closure(){
 	return a+b; 
 } 
 	return  closure; 
}

2、内存泄漏?
内存泄漏:指任何对象在您不再拥有或需要它之后仍然存在

3、哪些操作会造成内存泄漏?
setTimeout 的第一个参数使用字符串而非函数的话,会引发内存泄漏;
闭包、控制台日志、循环(在两个对象彼此引用且彼此保留时,就会产生一个循环);

4、JS 内存泄漏的解决方式?
1.1、可以在 JavaScript 文件开头添加 “use strict”,使用严格模式;这样在严格模式下解析 JavaScript 可以防止意外的全局变量
1.2、闭包,一个可以访问外部(封闭)函数变量的内部函数;

5、对原型(prototype)理解?

原型的主要作用:就是为了`实现继承`与`扩展对象`;

JavaScript 是一种通过原型实现继承的语言与别的高级语言是有区别的(像 java,C#是通 过类型决定继承关系的)(JavaScript 是的动态的弱类型语言)可以认为 JavaScript 中所有都是对象****原型也是一个对象通过原型可以实现对象的属性继承对象中都包含了一个” prototype”内部属性这个属性所对应的就是该对象的原型;“prototype”作为对象的内部属性,是不能被直接访问的。为了方便查看一个对象的原型,(中引入了标准对象原型访问器Object.getPrototype(object)”);

6、原型链(解决的是继承问题吗)?
首先呢 说到原型链 就得先讲原型:每个对象都会在其内部初始化一个属性,就是 prototype(原型)
原型链:当我们访问一个属性时,如果这个对象不存在这个属性,那么 他就会继续去从 prototype里去找这个属性,而 每个prototype都会有自己的prototype属性,于是就产生原型链

当我们修改原型时,与之相关的对象也会继承这一改变

7、js 中的继承?
首先 地知道 继承有6种方法
1.1、原型链继承:通过原型将一个引用类型继承另一个引用 类型的属性和方法;
1.2、借用构造函数继承:通过使用 apply()call()方法可以在新创建的子类对象上 执行构造函数;
1.3、组合继承(原型+借用构造): 将原型链和借用构造函数的技术组合到一起,从而取长补短发挥两者长处的一种继承模式;
1.4、型式继承:借助原型可以基于已有的对象创建新对象,同时还不必须因此创建自定义的类型
1.5、寄生式继承:寄生式继承是原型式继承的加强版;
1.6、寄生组合式继承:通过借用函数来继承属性,通过原 型 链的混成形式来继承方法;

8、this的情况?
1.1、以函数的形式调用,this指向的永远是window;
1.2、以方法的形式调用,this指向的调用方法;
1.3、以构造函数的形式调用,this指向新创建的哪个对象;
1.4、使用call()、apply()的形式调用,this指向的是指定的对象;
1.5、箭头函数, 箭头函数的this指向是需要看 外层是否有函数; 两种情况
:如果有:那么外层函数的this就是内部箭头函数的this;
:没有的话:就是指向window;
1.6、特殊的this指向一般都是指向最后调用他的对象;

9、数组中的 forEach 和 map 的区别

相同点: 都是循环遍历数组中的每一项,且 组 都不会改变原数组;
不同点map 方法返回一个新的数组;不会对空数组进行检测,map 方法不会改变原始数组;
forEach 方法用来调用数组的每个元素,将元素传给回调函数,对于空数组不会调用回调函数的。
无论 arr 是不是空数组,forEach 返回的都 是 undefined

扫描二维码关注公众号,回复: 14744125 查看本文章

10、for in 和 for of 的区别?
循环对象属性的时候使用 for...in
遍历数组的时候的时候使用 for...of
for…in 循环出的是 key,for…of 循环出的是 value
for…of 不能循环普通的对象,需要通过和 Object.keys()搭配使用;

猜你喜欢

转载自blog.csdn.net/weixin_45103130/article/details/123654129
今日推荐