自测JavaScript(下)

54 阅读2分钟

this/call/apply/bind

1. 对this对象的理解

  1. 函数调用模式 : 当一个函数不是对象的属性时,直接调用这个函数,this就会指向全局对象
  2. 方法调用模式 : 当一个函数被当成对象的属性调用时,this指向这个对象

call() 和 apply() 的区别?

call()和apply()的作用是一致的,他们区别在于参数上

  1. apply的第一个参数是this绑定对象,第二个参数是类数组或数组
  2. call的第一个参数也是this绑定对象,第二个参数开始是逐个参数序列

实现call、apply 及 bind 函数

call()

    Fucntion.prototype.myCall = function( context ){
        if(typeof this !== 'fucntion' ){
            throw new TypeErr
        }
        let arg = [...arguments],rest=null;
        context = context || window
        context.fn = this
        rest = context.fn(...arg)
        delete context.fn
        return rest
    }

浏览器的垃圾回收机制

JavaScript拥有垃圾回收机制,JavaScript会分配内存空间存储变量,当一个变量不再使用时就会释放这个空间
回收机制

  1. 当一个变量不再使用时,JavaScript会释放对应内存空间

  2. 全局变量和局部变量,全局变量是生命周期是浏览器卸载时。而局部变量是在一个函数内的变量,当函数执行完毕时,这个变量也不再需要,JavaScript就会释放它的内存空间 垃圾回收的方式

  3. 标记清除

  4. 引用计数

async/await

async返回的是一个promise对象,当遇到await会返回,直到触发的异步操作结束时,就会执行构造体后的语句,理解为让出线程,脱离async函数

对Promise的理解

Promise是一个异步编程的方案,t,它大大改善了异步编程的困境,避免了回调地狱

并发与并行的区别?

并发,宏观概念,我有任务A,B,在一段时间任务间的切换完成A,B两个任务。这就是并发
并行,微观概念,我又任务A,B,假设CPU有两个核心。同时完成任务A,B,同时完成多个任务,这就是并行