instanceOf学习笔记

来源:互联网 发布:linux print 编辑:程序博客网 时间:2024/06/18 08:15

  * 自用笔记:instanceOf学习 *

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)
1.  引用计数
如果一个变量被另一个变量引用,那么该变量的应用计数+1;当这个变量不再引用该变量(该变量被回收掉了)时,
此时这个变量的引用计数 - 1;
GC会在一定时间间隔去查看每个变量的计数,如果为0, 就将其占用的内存回收。
缺点: 循环引用:会造成无法回收变量的内存

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

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

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