javascript高级程序设计第四章:变量、作用域和内存问题读书笔记

1:基本类型值是保存在栈内存中的简单数据段,完全保存在内存中的一个位置。引用类型值是保存在堆内存中的对象,由于这种值大小不固定,因此不能保存在栈内存中。引用类型的值的变量保存的是一个指针,保存着一块内存的地址。

2:复制基本类型的值,会在栈中创建一个新值,此后两者不会相互影响。复制引用类型的值,会在栈中复制一个指针,两个指针指向堆中的同一个对象,改变其中一个变量,就会影响到另一个变量。

3:函数传递参数与复制变量一样,传递基本类型的值是复制一个副本,传递引用类型的值是复制一个指针,参数只能按值传递。可以把函数的参数想象成局部变量。

4:检测基本类型的值适宜用typeof,检测引用类型是什么对象,适宜用instanceof。

5:每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中。全局执行环境被认为是window对象,所有全局变量和函数都是作为window对象的属性和方法创建的。

6:当代码在一个环境中执行时,会创建一个由变量对象构成的作用域链。作用域链的前端是当前执行的代码所在环境的变量对象,如果这个环境是函数,则将其活动对象作为变量对象。作用域链中的下一个变量对象来自包含环境,一直延续到全局执行环境。全局执行环境是作用域链的最后一个对象。

7:没有块级作用域,如if,for等。

8:变量未经声明即被初始化,则会被添加到全局环境。

9:查询标识符从作用域链的前端开始,向上逐级查询,找到了即停止,否则会一直追溯到全局环境的变量对象。

10:对于不再有用的全局变量和全局对象的属性,最好将其设置为null来释放其引用。以便垃圾收集器将其回收。

posted @ 2013-09-02 15:30  谨平谨平  阅读(131)  评论(0)    收藏  举报