首页 > 代码库 > JavaScript高级程序设计-第四章-变量、作用域和内存问题

JavaScript高级程序设计-第四章-变量、作用域和内存问题

 

ECMAScript变量
基本类型:5 引用类型
存于内存栈 实际对象位于内存堆
按值访问,可操作保存在变量中实际的值 js不能直接操作对象的内存空间,而是操作它的引用
不可添加属性和方法 可添加属性和方法
变量复制是一个实际的值,互不干扰 变量复制是一个指针,指向相同的对象,改变其中一个变量会影响另一个
Undefined  
Null  
Boolean  
Number  
String  
   
   

 

variable typeof v v instanceof constructor
var v; undefined   false
var v=true; boolean   false
var v=23; number   false
var v="string" string   false
var v=null; object   false
var v=new Object(); object  
 1||0
var v=function(){} function  1||0
var v=//; function or object  1||0

 

ECMAScript中所有函数的参数都是按值传递的,参数实际上是函数的局部变量。

 

作用域:

执行环境有全局执行环境和函数执行环境之分

每个执行环境都有一个对应的变量对象,变量对象的作用域链,用途是保证 对 执行环境有权访问的变量和函数 的有序访问。

在with语句,及try-catch语句中,会在作用域链前端生成一个临时变量对象,width为指定对象,catch会创建新的变量对象。

js中没有块级作用域

 

垃圾回收:

1:标记清除(进入或离开执行环境)

2:引用记数(被引用+1,反之-1),不能避免循环引用的问题(ie9-的COM)

v=null,解除引用