广州北大青鸟计算机职业培训学校
互联网技术培训、软件技术培训、大数据培训、云计算培训、数据分析培训信息网
当前位置:网站首页 > 软件专业 > 前端开发专业 > 正文

Web前端开发常见面试题合集(二)_惠州前端培训学校

作者:hz_admin01发布时间:2022-05-01分类:前端开发专业浏览:714


导读:今天我们跟着惠州北大青鸟老师一起来了解一下Web前端开发常见面试题合集(二),希望对大家有帮助。

今天我们跟着惠州北大青鸟老师一起来了解一下Web前端开发常见面试题合集(二),希望对大家有帮助。

1. 说说你对作用域链的理解?

作用域链的作用是保证执行环境里

有权访问的变量和函数是有序的,

作用域链的变量只能向上访问,

变量访问到window对象即被终止,

作用域链向下访问变量是不被允许的;

作用域就是变量与函数的可访问范围,

即作用域控制着变量与函数的可见性

和生命周期。

2. 请说说JavaScript原型,原型链 ?

原型:

当我们访问一个对象的属性时,

每个对象都会在其内部初始化一个属性,

就是prototype(原型);

原型链:

如果这个对象内部不存在这个属性,

那么他就会去prototype里找这个属性,

这个prototype又会有自己的prototype,

于是就这样一直找下去,

也就是我们平时所说的原型链;

两者关系:

instance.constructor.prototype = instance.__proto__

3. 请解释什么是事件代理?

事件代理(Event Delegation),

又称之为事件委托。

是 JavaScript 中常用绑定事件

的常用技巧。

“事件代理”即是把原本需要绑定

的事件委托给父元素,让父元素

担当事件监听的角色。

事件代理的原理是DOM元素的事件冒泡。

使用事件代理的好处是可以提高性能,

可以大量节省内存占用,减少事件注册,

比如在ul上代理所有li的click事件;

此外, 还可以实现动态新增子对象时无需

再次对其绑定事件。

4. new操作符具体完成了哪几个操作?

1) 创建一个空对象, 定义this 变量引用该对象,

同时还继承了该函数的原型;

2) 属性和方法被加入到 this 引用的对象中;

3) 新创建的对象由 this 所引用,

并且最后隐式的返回 this

5. 说几条写JavaScript的基本规范?

1) 不要在同一行声明多个变量;

2) 请使用===/!==来比较true/false或者数值;

3) 使用对象字面量替代new Object这种形式;

4) 减少使用全局函数, 全局变量;

5) switch语句必须带有default分支;

6) if语句必须使用大括号;

7) for-in循环中的变量;

应该使用var关键字明确限定作用域;

从而避免作用域全局污染。

6. 如何判断一个对象是否为数组?

function isArray(arg) {

if (typeof arg === 'object') {

return Object.prototype.toString.call(arg) === '[object Array]';

return false;

}

}

7. 冒泡排序?

思路:

每次比较相邻的两个数,

如果后一个比前一个小,换位置;

var arr = [2, 0, 1, 9, 8, 7, 3];

function bubbleSort(arr) {

for (var i = 0; i < arr.length - 1; i++) {

for(var j = 0; j < arr.length - 1; j++) {

if(arr[j + 1] < arr[j]) {

var temp;

temp = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = temp;

}

}

}

return arr;

}

console.log(bubbleSort(arr));

8. 快速排序?

思路: 采用二分法,取出中间数,

数组每次和中间数比较,

小的放到左边,大的放到右边;

var arr = [2, 0, 1, 9, 8, 7, 3];

function quickSort(arr) {

if(arr.length == 0) {

return []; // 返回空数组

}

var cIndex = Math.floor(arr.length / 2);

var c = arr.splice(cIndex, 1);

var l = [];

var r = [];

for (var i = 0; i < arr.length; i++) {

if(arr[i] < c) {

l.push(arr[i]);

} else {

r.push(arr[i]);

}

}

return quickSort(l).concat(c, quickSort(r));

}

console.log(quickSort(arr));

9. 请用至少3中方式实现数组去重?

方法一: indexOf

var arr1=[1,2,3,4,5,4,3,2,1];

function repeat1(arr){

for(var i=0,arr2=[];i<arr.length;i++){

if(arr2.indexOf(arr[i])==-1){

arr2.push(arr[i]);

}

}

return arr2;

}

方法二: hash

function repeat2(arr){

// 1. 遍历arr中每个元素,同时声明hash

for(var i=0,hash={};i<arr.length;i++){

// hash中是否包含当前元素值的建

// 如果不包含,就hash添加一个新元素,

// 以当前元素值为key,value默认为1

if(hash[arr[i]]===undefined){

hash[arr[i]]=1;

}

}

// 2. 将hash转为索引

var i=0;

var arr2=[];

for(arr2[i++] in hash);

return arr2;

}

方法三: 正则

function repeat3(arr){

return arr.sort().join(",,").

replace(/(^|,,)([^,]+)(,,\2)*/g,"$1$2").split(",,");}

console.log(repeat3(arr1));

10. HTTP状态码及其含义?

1XX:

信息状态码100 Continue 继续,

一般在发送post请求时,

已发送了http header之后服务端将返回此信息,

表示确认,之后发送具体参数信息;

2XX:

成功状态码200 OK 正常返回信息

201 Created 请求成功并且服务器创建了新的资源

202 Accepted 服务器已接受请求,但尚未处理

3XX:

重定向301 Moved Permanently 请求的网页已永久移动到新位置。

302 Found 临时性重定向。

303 See Other 临时性重定向,且总是使用 GET 请求新的 URI。

304 Not Modified 自从上次请求后,请求的网页未修改过。

4XX:

客户端错误

400 Bad Request 服务器无法理解请求的格式,

客户端不应当尝试再次使用相同的内容发起请求。

401 Unauthorized 请求未授权。

403 Forbidden 禁止访问。

404 Not Found 找不到如何与 URI 相匹配的资源。

5XX:

服务器错误500 Internal Server Error 最常见的服务器端错误。

503 Service Unavailable 服务器端暂时无法处理请求

(可能是过载或维护)。

想了解更多关于前端的知识吗?可以来惠州北大青鸟新方舟校区了解一下。

标签:惠州前端培训学校惠州前端基础惠州前端培训北大青鸟IT计算机学校北大青鸟IT软件学校前端北大青鸟IT学校惠州北大青鸟北大青鸟


前端开发专业排行
标签列表
网站分类
文章归档
最近发表