前端面试复习

一、javascript运行机制

请看下面的代码

setTimeout(function() {
  console.log(1)
}, 0);
new Promise(function executor(resolve) {
  console.log(2);
  for( var i=0 ; i<10000 ; i++ ) {
    i == 9999 && resolve();
  }
  console.log(3);
}).then(function() {
  console.log(4);
});
console.log(5);

https://www.cnblogs.com/sunmarvell/p/9564815.html
这是一个很明显考js运行机制的题。
因为Promise定义之后便会立即执行,其后的.then()是异步里面的微任务。
然后后面就是依次执行,所以就会出现:23451

二、浅拷贝和深拷贝

https://www.zhihu.com/question/23031215
https://www.jianshu.com/p/f4329eb1bace
浅拷贝就是通过循环对类的属性进行循环赋值.

var obj = { a:1, arr: [2,3] };
var shallowObj = shallowCopy(obj);

function shallowCopy(src) {
  var dst = {};
  for (var prop in src) {
    if (src.hasOwnProperty(prop)) {
      dst[prop] = src[prop];
    }
  }
  return dst;
}

但是会出现一个问题,就是类里面的引用型类型的地址会一致,导致更改shallowObj的值的时候,obj的值也会进行修改。

三、一个原型链继承的问题

原型链:其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。
实现原型链有一种基本模式,其代码大致如下:

function SuperType(){ 
 this.property = true; 
}
SuperType.prototype.getSuperValue = function(){ 
 return this.property; 
}; 
function SubType(){ 
 this.subproperty = false; 
} 
//继承了 SuperType 
SubType.prototype = new SuperType(); 
SubType.prototype.getSubValue = function (){ 
 return this.subproperty; 
}; 
var instance = new SubType(); 
alert(instance.getSuperValue());
截屏2021-01-31 下午11.23.16.png

所以在这段代码中,我们通过将SubType的默认原型换成了SuperType实例来实现了继承

四、 dom选择器优先级是什么,以及权重值计算

https://m.html.cn/qa/css3/15979.html
行内>id>class>element

权值等级划分, 一般来说是划分4个等级:


第一等:代表 内联样式,如: style=””,权值为:1000。

第二等:代表 ID选择器,如:#content,权值为:0100。

第三等:代表 类,伪类和属性选择器,如: .content , :hover , [type="text"] 权值为:0010。

第四等:代表 标签选择器和伪元素选择器,如: p ,::first-line 权值为:0001。

五、写出3个使用this的典型应用(call/apply)

https://blog.csdn.net/bianliuzhu/article/details/82587984
call apply bind

var obj={
  name:'aoteman',
  getname:function(){
        return this.name  
  }
}
var obj2={
    name:"xiaoguaishou"
}
console.log(obj.getname()) // aoteman
console.log(obj.getname.apply(obj2)) //xiaoguaishou
console.log(obj.getname.call(obj2)) //xiaoguaishou
console.log(obj.getname.bind(obj2)()) //xiaoguaishou

// 区别
obj.getname = function(a,b){
    return this.name + " " + a + " " + b;
}
console.log(obj)
console.log(obj.getname.apply(obj2,[1,2])) //xiaoguaishou 1 2
console.log(obj.getname.call(obj2,1,2)) //xiaoguaishou 1 2
console.log(obj.getname.bind(obj2,1,2)()) //xiaoguaishou 1 2


六、如何深度克隆(constructor)

https://www.cnblogs.com/momo798/p/9235128.html
一维数据结构的深拷贝方法建议使用:Object.assign();

二维数据结构及以上的深拷贝方法建议使用:JSON.parse(JSON.stringify());

特别复杂的数据结构的深拷贝方法建议使用:Loadsh.cloneDeep();

七、Ajax原理

(1)创建对象

var xhr = new XMLHttpRequest();

(2)打开请求

xhr.open('GET', 'example.txt', true);

(3)发送请求

xhr.send(); 发送请求到服务器

(4)接收响应

xhr.onreadystatechange =function(){}

(1)当readystate值从一个值变为另一个值时,都会触发readystatechange事件。

(2)当readystate==4时,表示已经接收到全部响应数据。

(3)当status ==200时,表示服务器成功返回页面和数据。

(4)如果(2)和(3)内容同时满足,则可以通过xhr.responseText,获得服务器返回的内容。

八、javascript是面向对象的,怎么体现javascript的继承关系

https://www.cnblogs.com/blackgan/p/5796706.html
function Par(name){
this.name = name
}
function Chl(age){
this.age = age
}
Chl.prototype = new Par("li")
var chi = new Chl(25)
console.log(chi.name)
console.log(chi.age)

九、null和undefined的区别?

https://www.cnblogs.com/sunyang-001/p/10792894.html

(1)null是一个表示”无”的对象,转我数值是为0,undefined是一个表示”无”的原
始值,转为数值时为NaN。当声明的变量还未被初始化时,变量的默认值为undefined

(2)Null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象

(3)Undefined表示”缺少值”,就是此处应该有一个值,但是还没有定义。典型用法是:

  a、变量被声明了,但没有赋值时,就等于undefined

  b、调用函数时,应该提供的参数没有提供,该参数等于undefined

  c、对象没有赋值属性,该属性的值为undefined

  d、函数没有返回值时,默认返回undefined

(4)null表示”没有对象”,即该处不应该有值。典型用法是:

  a、作为函数的参数,表示该函数的参数不是对象

  b、作为对象原型链的终点

十、new操作符具体干了什么呢?

1.获取实参中的第一个参数(构造函数),就是调用New函数传进来的第一个参数,暂时记为Constructor;
2.使用Constructor的原型链结合Object.create来创建一个对象,此时新对象的原型链为Constructor函数的原型对象;
3.改变Constructor函数的this指向,指向新创建的实例对象,然后call方法再调用Constructor函数,为新对象赋予属性和方法
4.返回新创建的对象,为Constructor函数的一个实例对象。

十一、闭包是什么,有什么特性,对页面有什么影响

①.封闭性:外界无法访问闭包内部的数据,如果在闭包内声明变量,外界是无法访问的,除非闭包主动向外 界提供访问接口;

②.持久性:一般的函数,调用完毕之后,系统自动注销函数,而对于闭包来说,在外部函数被调 用之后,闭包结构依然保存在;

对页面的影响:

使用闭包会占有内存资源,过多的使用闭包会导致内存溢出等。

十二、call和apply的区别

传参数形式不同

十三、for..in 和 for..of的区别

https://blog.csdn.net/adognamedgeorge/article/details/93622800
for..in 主要是循环遍历属性,for..of是循环数组的

十四、instanceof运算符

可以通过两种方式来确定原型和实例之间的关系。第一种方式是使用 instanceof 操作符,只要用这个操作符来测试实例与原型链中出现过的构造函数,结果就会返回 true。
第二种方式是使用 isPrototypeOf()方法。同样,只要是原型链中出现过的原型,都可以说是该原型链所派生的实例的原型,因此 isPrototypeOf()方法也会返回 true,

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容