Javascript高级程序设计总结(2)

  • 基本类型值 ,按值访问,

  • 引用类型值 ,按引用访问,js不允许直接访问值得位置和内存的位置,而是操作操作对象的引用

  • instanceof

用来检测引用类型的数据类型,所有引用类型都会返回true,如果监测基本数据类型时,则会返回false

​ eg:cos instanceof Object/Array/RegExp=》true

  • 执行环境和作用域

执行环境有一个与之关联的变量对象 variable object ,环境中定义的所有函数和变量都保存在这个对象当中。WEB浏览器中,全局执行 环境被认为是window。执行环境的所有代码执行完毕后,会将环境销毁,环境中的变量和函数也会被销毁。而全局执行环境则直到关闭网页或浏览器时才会销毁

每个函数都有自己的执行环境,执行流执行到函数时,会把这个函数的环境压入一个环境栈中,执行后在弹出。

环境时函数时,将活动对象active object作为变量对象。

当代码在一个环境中执行时,会创建变量对象的一个作用域链(scope chain)目的时保证执行环境的有序访问,作用域联的最前端始终是当前执行代码所在的执行环境的变量对象。作用域链的下一个变量对象始终是外部环境,直到全局执行环境

函数的变量对象(活动对象)最开始只包含一个变量 (arguments)

标识符解析是沿着作用域链一级一级搜索标识符的过程

扫描二维码关注公众号,回复: 5643549 查看本文章
  • 延长作用域链

执行环境只有两种 全局和局部

但是可以通过with或者cathch来延长作用域链

这两个语句都会在作用域链最前端添加一个变量对象,对于with语句来说,会将指定的对象添加(with(对象)),catch会创建一个新的变量对象,在其中抛出错误对象的声明。

  • 垃圾收集

js中执行环境会负责管理代码执行过程中使用的内存

对于局部变量(通常在执行函数中存在)的声明周期,执行函数结束后,垃圾收集器就要跟踪判断哪个变量有用和没用,然后打上无用变量的标记。这种表示方法有两种(垃圾收集器会按照固定的时间间隔,周期性的执行这个工作)

标记清除 就是一层层晒,首先给所有存储在内存中的所有变量都加上标记,然后去掉环境中的变量和被环境中的变量引用的变量,之后再被加上标记的变量就是准备删除的变量了,销毁值然后释放那些内存

引用计数 跟踪每个值被引用的次数,次数为零时说明没有办法再访问这个值了,为零时被清除
问题是:循环引用,即当两个引用变量中格子包含一个属性指向另一个引用变量的值,这样会造成两个引用变量的值的引用次数都是2,并且如果调用对应的函数多次调用时,会造成大量内存无法回收

  • 性能

垃圾收集器时周期性运行的,ie是根据内存分配量来运行垃圾收集器的,ie7之前都是有对应的临界值(256个变量,4096个对象字面量,和数据族元素或者64kb的字符串)时,达到任何一个临界值,就会运行==>因此如果脚本中包含大量的变量,那垃圾收集器就不得不频繁的运行。所以ie为了解决这个问题采用了动态的分配内存的各个极限值的状态,当垃圾收集器运行时,如果发现内存分配率不到15%的话,会将各个临界值的大小翻一倍,如果达到85%,的话则重新返回默认值
js在内存管理的时候,要确保用最少的内存让页面获取更好的性能=》方法就是只保存必要的数据,一旦数据无用,可将其赋值null

猜你喜欢

转载自blog.csdn.net/yuan_crazycode/article/details/88778451