前端常见面试题(八)@郝晨光


ES5/ES6 的继承除了写法以外还有什么区别?

  1. ES5寄生组合式继承(只是列举一个方法,ES5继承还有很多实现方式)
function Parent(name) {
    this.name = name;
}
Parent.prototype.say = function() {
    console.log(this.name);
};

function Child(name,sex) {
    Parent.call(this,name);
    this.sex = sex;
}

const ChildProtoType = Object.create(Parent.prototype);
ChildProtoType.constructor = Child;
Child.prototype = ChildProtoType;
Child.constructor = Child;
Child.prototype.getSex = function() {
    console.log(this.sex);
};

let child = new Child('张三','男');
console.log(child);
child.say();
child.getSex();
ES5继承
  1. ES6继承
class Parent {
    constructor(name) {
        this.name = name;
    }
    say() {
        console.log(this.name);
    }
}
class Child extends Parent {
    constructor(name, sex) {
        super(name);
        this.sex = sex;
    }
    getSex() {
        console.log(this.sex);
    }
}
let child = new Child('李四', '女');
console.log(child);
child.say();
child.getSex();
ES6继承

ES6中子类继承父类的属性使用了super关键字,ES6语法实现是ES5的语法糖,表面上,ES6的类关键字和子类继承关键字 实现的结构和ES5继承一样,但是根本还是有差别的,ES5继承prototype属性是先实例化父类,直接继承;而 ES6是在实例化子类对象时继承父类的prototype,即实例化父类。



http状态码有哪些?分别是什么意思?

  1. 1**(信息类):表示接收到请求并且继续处理
    • 100 Continue 继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息
  2. 2**(响应成功):表示动作被成功接收、理解和接受
    • 200 OK 正常返回信息
    • 201 Created 请求成功并且服务器创建了新的资源
    • 202 Accepted 服务器已接受请求,但尚未处理
  3. 3**(重定向类):为了完成指定的动作,必须接受进一步处理
    • 301 Moved Permanently 请求的网页已永久移动到新位置。
    • 302 Found 临时性重定向。
    • 303 See Other 临时性重定向,且总是使用 GET 请求新的 URI。
    • 304 Not Modified 自从上次请求后,请求的网页未修改过。
  4. 4**(客户端错误类):请求包含错误语法或不能正确执行
    • 400 Bad Request 服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求。
    • 401 Unauthorized 请求未授权。
    • 403 Forbidden 禁止访问。
    • 404 Not Found 找不到如何与 URI 相匹配的资源。
  5. 5**(服务端错误类):服务器不能正确执行一个正确的请求
    • 500 Internal Server Error 最常见的服务器端错误。
    • 503 Service Unavailable 服务器端暂时无法处理请求(可能是过载或维护)。


浏览器是如何渲染页面的?

  1. 简述浏览器渲染过程

    1. 解析HTML以构建DOM树:渲染引擎开始解析HTML文档,转换树中的html标签或js生成的标签到DOM节点,它被称为 — 内容树。
    2. 构建渲染树:解析CSS(包括外部CSS文件和样式元素以及js生成的样式),根据CSS选择器计算出节点的样式,创建另一个树 — 渲染树。
    3. 布局渲染树: 从根节点递归调用,计算每一个元素的大小、位置等,给每个节点所应该出现在屏幕上的精确坐标。
    4. 绘制渲染树: 遍历渲染树,每个节点将使用UI后端层来绘制。
  2. CSS阻塞渲染

    • CSS 是阻塞渲染的资源。需要将它尽早、尽快地下载到客户端,以便缩短首次渲染的时间。
    • 这就是为什么我们将外部样式的引入放在head标签中的原因,在body渲染前先把相对完整CSSOM Tree构建好。
  3. JavaScript阻塞渲染

    • JavaScript 会阻止 DOM 构建和延缓网页渲染。 为了实现最佳性能,可以让您的JavaScript 异步执行,并去除关键渲染路径中任何不必要的 JavaScript。

详细链接:

  1. 浏览器如何渲染页面
  2. [ JS 进阶 ] Repaint 、Reflow 的基本认识和优化



typeof 和 instanceof 相同点与不同点

相同点
typeofinstanceof 都用来判断一个变量的数据类型。
不同点:

  1. typeof返回值是一个字符串, 用来说明变量的数据类型。
  2. typeof一般只能返回如下六个数据类型,null会返回Object,若参数为引用类型,始终返回object :number, boolean, string, function, object, undefined;es6新增:symbol,es10新增:bigint;共八个数据类型。
  3. instanceof返回一个布尔值。
  4. instanceof一般用来判断一个变量是否来自某个引用类型的实例,判断在其原型链中是否存在一个构造函数的prototype属性,如:
    •  console.log([] instanceof Array); // true
       console.log([] instanceof Object); // true
      
  5. 可以看到的是[]是来自于Array是没有问题的,返回值为true;但是[] instanceof Object也为true是我们不想看到的,这是因为在javascript中,Object是最顶级的数据类型,所有的引用类型最终都会指向Object
  6. 对于这种情况,我们可以使用ES6新增的Array.isArray([])来进行判断,也可以通过[].constructor === Array来判断,也可以通过Object.prototype.toString.call([]) === '[object Array]'



如何解决回调地狱?请手写代码

一、拆解function

function methodOne() {
    fs.readFile(url, (err, content) => {
        // do some thing
    })
}
function methodTwo() {
    fs.readFile(url, (err, content) => {
        // do some thing
        methodOne()
    })
}
fs.readFile(url, (err, content) => {
    if(!err) {
         methodTwo()
    }
})

二、事件发布/监听模式
前端常见面试题(七)@郝晨光 实现异步的几种方法中 3. 发布者订阅者模式
三、Promise

function syncMethod() {
    return new Promise((reslove, reject) => {
          if(true) {
                reslove('success! do some thing')
          }else {
                reject('error message!')
          }
    })
}
syncMethod().then(res => {
    console.log(res);
    return syncMethod();
}).then(res => {
    console.log(res);
})

四、Generator

    function *syncMethod() {
        yield 1;
        yield 2;
        yield 3;
        return 4;
    }
    let generator = syncMethod();
    console.log(generator.next()); // {value: 1, done: false}
    console.log(generator.next()); // {value: 2, done: false}
    console.log(generator.next()); // {value: 3, done: false}
    console.log(generator.next()); // {value: 4, done: true}

五、async/await

  1. function拆分的方式其实仅仅只是拆分代码块,时常会不利于后续维护;
  2. 事件发布/监听方式模糊了异步方法之间的流程关系;
  3. Promise虽然使得多个嵌套的异步调用能够通过链式的API进行操作,但是过多的then也增加了代码的冗余,也对阅读代码中各阶段的异步任务产生了一定干扰;
  4. 通过generator虽然能提供较好的语法结构,但是毕竟generator与yield的语境用在这里多少还有些不太贴切。
  5. 所以就有了async/await语法糖
// 模拟获取数据
function getData() {
    return 'response';
}
// async函数
async function syncMethod() {
    let res = await getData(); // 等待异步结束,将结果保存在变量中
    console.log(res); // 一般异步的话,await后边会跟随一个Promise对象,调用.then方法来获取值,在await函数下方的代码块,等于在getData().then()中运行
}
syncMethod()



本文 CSDN 地址: 前端常见面试题(八)@郝晨光

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

推荐阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,490评论 1 45
  • 【转载】CSDN - 张林blog http://blog.csdn.net/XIAOZHUXMEN/articl...
    竿牍阅读 3,488评论 1 14
  • 前端开发面试题 面试题目: 根据你的等级和职位的变化,入门级到专家级,广度和深度都会有所增加。 题目类型: 理论知...
    怡宝丶阅读 2,587评论 0 7
  • 请参看我github中的wiki,不定期更新。https://github.com/ivonzhang/Front...
    zhangivon阅读 7,131评论 2 19
  • 面试题一:https://github.com/jimuyouyou/node-interview-questio...
    R_X阅读 1,624评论 0 5