Js问题深究系列

502 阅读3分钟

1原型链

提取自本链接 mp.weixin.qq.com/s?__biz=MzU… 讲的真的很明了。

2 事件冒泡与事件捕获

  • js事件流:先捕获,其次处于目标阶段,最后冒泡。
  • 事件代理:设置一个事件来处理一堆事件。
  • 阻止事件冒泡:1.event.stopPropagation(仅阻止冒泡)2.在事件中返回false(阻止整个事件)
  • 阻止默认事件:event.preventDefault.

3、js操作dom

  • 创建:create
  • 添加:append
  • 删除:remove
  • 替换:replace
  • 插入:insert
  • 查找:getElementBy

4、数组去重

  • indexOf:返回元素在数组中第一次出现的索引值
  • includes:判断数组中是否包含此元素。
  • sort:使用sort先排序,判断此项和下一项是否相同,不同则push进新数组
  • Set:使用ES6新方法去重,可去重后的数据结构不是数组,要使用扩展运算符将其转为数组。

5、严格模式(use strict)限制

  • 变量必须声明之后再使用(否则抛出 ReferenceError)
  • 禁止this指向全局
  • 为只读属性赋值会抛出TypeError

6、call、apply、bind

  • call和apply区别是传参方式不同,apply可以传数组
  • call和apply的第一个参数如果是null或者undefined,则this指向全局。
  • call和apply改变了this指向并执行了该函数。
  • bind是改变this指向返回一个新的函数,之后再调用此函数this都指向bind绑定的第一个参数。
  • 调用三种方法的若不是函数,则会报错。

7、垃圾回收机制及内存管理

  • Javascript具有自动垃圾回收机制,也就是说,执行环境会负责管理代码执行过程中使用的内存。

    • 原理:垃圾收集器会定期(周期性)找出那些不在继续使用的变量,然后释放其内存通常情况下有两种实现方式:标记清除引用计数
  • 标记清除: js中最常用的垃圾回收方式就是标记清除。 当变量进入环境时,例如,在函数中声明一个变量,就将这个变量标记为“进入环境”。从逻辑上讲,永远不能释放进入环境的变量所占用的内存,因为只要执行流进入相应的环境,就可能会用到它们。而当变量离开环境时,则将其标记为“离开环境”。

  • 引用计数:是跟踪记录每个值被引用的次数。 当声明了一个变量并将一个引用类型值赋给该变量时,则这个值的引用次数就是1。如果同一个值又被赋给另一个变量,则该值的引用次数加1。相反,如果包含对这个值引用的变量又取得了另外一个值,则这个值的引用次数减1。当这个值的引用次数变成0时,则说明没有办法再访问这个值了,因而就可以将其占用的内存空间回收回来。这样,当垃圾回收器下次再运行时,它就会释放那些引用次数为0的值所占用的内存。

  • 内存管理:js引擎基础是GC方案,就是遍历所有可访问对象,回收已经不可访问对象

    • 优化:将可访问对象分为临时访问对象和持久访问对象,多回收临时的,少回收持久的,这样可以减少遍历次数,省时。

    遇到难点再添加,未完待续。。。。。。