在javascript中有五种基本类型:string/boolean/null/undefind/number,一种引用类型:objectjavascript
内存中的未知: 1/由于基本类型数据是简单类型数据执行时建立在栈内存中便可,2/object是复杂类型数据占内存多因此保存在堆内存中以便于其余变量进行引用;java
执行环境及做用域:web
执行环境定义了变量有权限的访问其余数据,并决定他们各自的行为。每个执行环境都有一个与之相关的变量对象相配,在这个变量中定义了全部该执行环境中的全部属性和方法。虽然咱们无法访问这个变量,可是在解析器处理数据的时候会使用到它。浏览器
在 web浏览器中最外层对象是window,在window中定义的全部变量和函数都是做为 window对象的属性和方法存在的。每个执行环境都有本身的生命周期,生命周期一旦结束即会销毁该环境的属性和方法和环境自己。window对象的环境只有在关闭网页退出浏览器时候才会被销毁。函数
局部的执行环境:每个函数都有本身的执行环境,当一个函数开始执行的时候会被压入执行栈,执行栈执行先入后出的规则,即先进入执行栈的函数是最外层的函数,最后进入执行栈的函数是最内部的函数,由于有栈规则也决定了,javascript的做用域链是从内部向外层查找的过程。由于外层相对于内层后被销毁。ECMAscript也是运用这个机制来处理执行流的。优化
垃圾回收:线程
1/标记清除:当一个变量进入执行栈的时候,垃圾收集器会为他加一个标记,好比翻动变量的某一位,当出栈的时候清除这个标记。垃圾回收器周期性运转清除没有被标记的变量;指针
2/引用计数:当一个变量被另外一个变量引用则计数1,没有被引用的变量被计数0,在早期的Navigator2中时候了这种引用计数,可是出现了重大的bug产生了极大的内存浪费,对象
如: var a = {b:b};生命周期
var b = {a:a};
对象之间的相互引用,计数为2,不会被垃圾回收器回收。
内存管理:
因为系统分配给浏览器的内存相对于其余桌面应用小的多,内存限制问题不只会影响到变量的内存分配,还会影响到调用栈以及一个线程可同时执行语句的数量。
内存优化的最佳方案就是,手动清除不须要的引用,将变量设置为空指针 null。