instanceOf学习笔记

  • 关于instanceOf的学习笔记
  1. instanceof运算规则:
    如果运算符后面的函数 的prototype属性所引用的对象,
    出现在 运算符前面的对象 的原型链上的话,就返回true;
    否则就返回false。
  2. 绘制作用域链的规则
    1》 将整个script标签的全局作用域,定义为0级作用域链。将全局作用域上的数据(变量、函数、对象等等)绘制在该链上。
    2》由于在词法作用域中,只有函数可以分割作用域。因此,只要遇到函数,就要引申出新的作用域链,级别为当前链的级别 + 1;
    3》 重复第二步骤,直到没有遇到函数为止。
  3. 变量的搜索原则:当访问一个变量时,
    1》 首先在当前变量所处作用域链上查找,如果找到就直接使用,并停止查找;
    2》 如果没有找到,就向上一级链(T - 1)上去查找,如果找到就直接使用,并停止查找;
    3》 如果没有找到,就继续向上一级链查找。直到0级链,如果找到就直接使用,并停止查找;
    4》 如果没有找到就报错。
    注意:
    1》 如果访问的变量不存在,会搜索整个作用域链(不仅性能低,而且抛出异常。)
    在实际开发,不推崇所有数据都写在全局上。尽量使用局部变量。推荐使用沙箱。
    如果在开发中,所有js代码都写在全局上,会造成全局变量的污染。
    2》同级别的链上的变量互不干扰。
  4. 在函数执行的时候,会创建一个执行的环境,包括activeObject(活动对象)以及作用域链
    1> activeObject: 存储的是所有在函数内部定义的变量,以及函数的形参;
    会将变量名字以及形参名字作为该对象的属性来存储
  5. 闭包
    1》概念:一个函数有权去访问另一个函数的内部数据。
    2》缺点: 会造成函数内部的数据常驻内存,从而引发内存泄漏的问题。
    3》解决的问题:解决在函数外部无法访问函数内部的数据。s
    4》为了防止闭包导致内存泄漏,在使用完闭包后,将其赋值为null即可。
    5》闭包怎么缓存数据?因为在函数内部有方法(函数)对其有引用,并且又将其返回到外部作用域上的一个变量接收。
  6. 垃圾回收机制:GC(Garbage Collection)
  7.  引用计数
    如果一个变量被另一个变量引用,那么该变量的应用计数+1;当这个变量不再引用该变量(该变量被回收掉了)时,
    此时这个变量的引用计数 - 1;
    GC会在一定时间间隔去查看每个变量的计数,如果为0, 就将其占用的内存回收。
    缺点: 循环引用:会造成无法回收变量的内存
    1
    2

    a{ val : b} , b{val:a} b = null;(a = null)

2. 标记清除
从当前文档根部(window对象)找一条路径,如果能到达该变量,那么说明此变量不应该 被回收掉
反之,应该被回收其所占用的内存。
–如果变量进入某个执行环境,那么给其标记为 “进入环境”;
–如果上述执行环境执行完成,被销毁,那么该环境内的所有变量都被标记为“已出环境”
–如果变量被标记为已出环境,就会被回收掉其占用的内存空间。

  1. 闭包的应用
  2. 计数器
  3. 对象的私有属性
  4. 解决fib数列递归性能
  5. 沙箱模式: 好处: 不会污染全局变量(或者其他作用域的变量),并且能保证自己的代码安全执行。
    特性:a: 能分割作用域,不会污染全局 fn
    b: 在分割后的作用域内部的代码要能自执行。fn()
    结构:
    1
    2
    3
    4
    (function (){
    //代码块
    window.fn = fn;
    }());

Comentarios

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×