前端常见JS面试题

191 阅读4分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第7天,点击查看活动详情

1.怎样解决js中回调函数多层嵌套问题 和 多异步任务并发执行问题?

多层嵌套问题:使用promise,使用async+await。
多异步任务并发执行问题:合并promise,多个异步任务并发执行,合并promise之后,即可继续往下执行下面代码。

2.js函数中的this究竟指向谁?怎样改变函数中this指向?

(1)全局作用域或者普通函数中this指向全局对象window。
(2)方法调用中谁调用this指向谁。
(3)构造函数中的this指向当前正在创建的对象(严格模式下必须使用new)。
(4)事件处理函数中的this指向触发事件的标签元素。
(5)Vue框架中的this指向vue组件
(6)箭头函数中的this指向父级中的this指向。
(7)原型中的函数内的this指向当前实例

3.事件监听函数

(1)onclick,用于为元素添加事件监听,第一个参数要监听的事件类型,第二个参数是事件的绑定的方法。

<div id="btn1" onclick="btn1Click(event)">蓝色</div>

(2)元素对象.onxxxx = 事件函数,xxxxxx是监听的事件类型,事件函数一般写为匿名函数,当元素触发这个事件时,事件函数就会被执行.自动传递event对象。

btn.onclick = function(e){
alert("你好");
}

(3)addEventListener,第一个参数要监听的事件类型,第二个参数是事件函数,第三个参数可选,是否在捕获阶段监听,默认false;

inner.addEventListener("click",function(e){
   console.log("inner冒泡阶段");
},false);

4.浏览器中事件传播的流程是什么?怎样阻止事件的传播?怎样阻止事件的默认行为?

传播流程:事件触发后,先从根元素到叶子元素逐层捕获,然后再从叶子元素到根元素逐层冒泡。
stopPropagation():阻止事件的继续传播。
e.preventDefault():阻止本次事件所触发的浏览器默认行为。

5.怎样判断一个变量是什么类型的?怎么判断一个对象是属于哪个类的?

类型:typeof
类:instanceof
Type和instanceof的区别和共同点
相同点:都可以用来判断一个变量是否为空,是什么数据类型;
不同点:typeof智能判断数据的基本类型,null,数组,和对象都返回的是object,有很大的局限性,这时候就需要使用instance of;
Instance of用于判断一个变量是否属于某个对象的对象实例,前面要求是一个对象,后面是一个构造函数,返回值是布尔值。

6.什么是原型和原型链?

原型:js中的对象都有一个属性叫做_proto_(也是一个对象),表示对象的原型。当访问对象中的属性或方法时,首先在对象本身中寻找,如果找不到则会在原型中查找,原型中也找不到会在原型的原型中寻找,直到找到最顶层为止。\

原型链:js中的类(构造函数)都会有一个prototype的属性,表示本类的原型类型,通过这个类实例化的对象(这个构造函数创建的对象)proto_都指向本类的prototype,从而实现了方法的共享。一个类的prototype也是一个对象,它也有_proto,把它的_proto_指向另一个类的prototype,那么这个类的对象就能访问另一个类中的方法,从而实现了方法的继承。

A类的prototype._proto_指向另一个类B,B的prototype._proto_又可以指向C,这种结构叫做原型链。

7.什么是闭包? 有什么作用?

闭包:当一个函数A的作用域被内部的函数B引用时,A函数的作用域就会被B函数闭包,当A函数执行完毕时,A函数的作用域也不会释放。

在函数A中声明了函数B,函数B中使用了函数A中的作用域中的变量,且函数A返回了函数B,那么函数B就对函数A的作用域形成了闭包。

作用:
1.可以实现对象的私有属性和私有方法。
2.可以封装变量,从而减少对全局作用域的污染。

8.webSocket是什么?适用于哪些网站?

webSocket是一种双工通信技术,可以实现服务器向客户端发送数据。

网站:1.社交订阅 2.多玩家游戏 3.协同编程 4.多媒体聊天 5.在线教育 6.体育实况更新 7.股票基金报价 8.点击流数据