面试-JavaScript

宏任务与微任务

宏任务(普通脚本,setTimeout()setInterval(),I/O,UI 渲染)

微任务(PromiseMutationObserver

特殊任务 process.nextTick() 当前 event loop tick 将结束时且下一个 event loop tick 将开始时执行

特殊任务 setImmediate() 下一轮 event loop tick 的 macrotask 阶段将结束时执行

事件循环(Node)

  • 同步任务

  • 发出异步请求

  • 规划定时器生效的时间

  • 执行 process.nextTick() 的回调

  • timers - 处理 setTimeout()setInterval() 的回调函数

  • I/O callbacks - 剩余的回调函数(setTimeout()setInterval()setImmediate() 及关闭请求回调函数之外)

  • idle, prepare - 内部使用

  • poll - 轮询时间,等待还未返回的 I/O 事件

  • check - 执行 setImmediate() 的回调

  • close callbacks - 关闭请求的回调

继承模式

  • 原型链继承

    1
    2
    SubType.prototype = new SuperType()
    SubType.prototype.constructor = SubType
  • 构造函数继承

    1
    SuperType.call(this, superProp)
  • 组合式继承

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    function SuperType(superProp){
    this.superProp = superProp
    }
    SuperType.prototype.printSuperProp = function(){
    console.log(this.superProp)
    }

    function SubType(superProp, subProp){
    SuperType.call(this, superProp)
    this.subProp = subProp
    }
    SubType.prototype = new SuperType()
    SubType.prototype.constructor = SubType
    SubType.prototype.printSubProp = function(){
    console.log(this.subProp)
    }
  • 寄生组合式继承

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    function SuperType(superProp){
    this.superProp = superProp
    }
    SuperType.prototype.printSuperProp = function(){
    console.log(this.superProp)
    }

    function SubType(superProp, subProp){
    SuperType.call(this, superProp)
    this.subProp = subProp
    }
    SubType.prototype = Object.create(SuperType.prototype)
    SubType.prototype.constructor = SubType
    SubType.prototype.printSubProp = function(){
    console.log(this.subProp)
    }

Object 三种冻结方式

  • Object.preventExtensions() | Object.isExtensible() | 阻止添加属性,原型不可更改

  • Object.seal() | Object.isSealed() | 阻止添加属性,阻止移除属性,阻止配置属性(configurable 为 false),原型不可更改

  • Object.freeze() | Object.isFrozen() | 阻止添加属性,阻止移除属性,阻止修改属性值,阻止配置属性(writable、configurable 为 false),原型不可更改

发布于

2023-09-27

更新于

2025-01-05

许可协议

评论

:D 一言句子获取中...

加载中,最新评论有1分钟缓存...