三.javascript部分(1)

这部分呢 内容有点多 所以我把它分成两部分,这里面涉及很多js高级程序设计知识点,建议看不懂的同学们不妨看个视频学一学,本人的话也是看了好多博客,加上看Java高级程序这本书,但是学习效果不佳,然后刷到了一个讲原型链的视频,感觉深入浅出,然后顺便就把其他诸如执行上下文,作用域链,闭包,面向对象,继承等通通一下子看完了,神清气爽,舒服得很。本来我是youtube看的视频,然后从哔哩哔哩上找了一下,发现也有,链接如下:

https://www.bilibili.com/video/BV1Ns411V7g5​www.bilibili.com

 

1.innerHTML和innerText

  • innerText只会取文本
  • innerHTML会把标签什么的都取出来

2.slice和splice

  1. slice是复制选定的部分,不会影响原数组
  2. splice是剪切一部分,会影响原数组

3Javascript基本类型和引用类型的存储区别

基本类型储存在栈中,但是一旦被闭包引用则成为常住内存,会储存在内存堆中。

复杂类型会储存在内存堆中

4什么是变量提升

JavaScript 中,函数及变量的声明都将被提升到函数的最顶部

5作用域链

6.函数的四种调用方式

  1. 对象调用方式(Array.prototype.slice())
  2. 构造调用方式(new+函数调用)
  3. 直接调用方式(相当于window对象调用)
  4. 借用调用方式(apply和call)都可以改变调用函数方法的对象,但是传入参数形式不一样,第一个参数都是要调用函数方法的对象,apply第二个参数是一个参数数组,call是将参数挨个传入

7call apply bind

手写call函数

思路:

  1. 给绑定对象添加一个fn = this 此时this就是要执行的方法
  2. 执行这个方法,传入参数,并返回得到的值

实现:

Function.prototype.myCall = function(context, ...args) {
    context.fn = this
    let res = context.fn(...args)
    delete context.fn
    return res
}

手写apply函数

思路:

  1. 改变this 同call
  2. 执行这个方法,注意参数,数组

实现:

Function.prototype.myApply = function(context, args) {
    context.fn = this
    let res = context.fn(...args)
    delete context.fn
    return res
}

手写bind函数

思路:

  1. 先把this,也就是这个方法,用变量保存起来
  2. 为了不分参数是不是数组,直接拍平flat
  3. 因为bind返回一个函数F,这个F函数有可能被new 所以判断一下F函数的this即可知道是否被new
  4. 如果被new 就把不要改变this了
  5. 如果没有被new 就使用apply执行,注意返回的函数F也有参数,用ES6的扩散操作符弄一下参数
  6. 把F函数的prototype变成原方法的实例

实现:

Function.prototype.myBind = function (context, ...args) {
    const self = this
    args = args.flat()
    const F = function () {
        return self.apply(this instanceof F ? this : context, [...args, ...arguments])
    }
    F.prototype = Object.create(this)
    return F
}

8.函数式编程

  • sort()
  • map()
  • forEach()

9.垃圾回收

  1. 标记清除法(进入代码的执行环境的时候给用到的变量打上标记,当该离开了该变量的执行环境的时候,该变量被清除)
  2. 引用计数法(当两个对象循环引用时,引用计数无法归零,造成内存泄露)

10.解释一下什么是原型链(字节内推的考官上来就问的这个,还有闭包概念,bom,dom)

  • 如果在当前对象中找不到对应的属性和方法,它会沿着原型链一直找下去
  • 所有函数的原型对象都指向object的原型对象

11.事件循环机制

  1. JS单线程,将异步任务交给WEB API
  2. WEB API的异步任务成功之后根据情况将回调放入宏任务队列和微任务队列
  3. 执行栈首先走script代码
  4. 第一次script代码为空的时候去微任务队列去拿直到微任务队列为空
  5. 再去宏任务队列拿
  6. 宏任务执行完一次就去微任务队列拿
  7. 循环......

 

 

 

发布于 2020-04-19

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值