第四章、变量、作用域和内存问题
1、ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值。基本类型值保存在栈内存的简单数据段,引用类型值是保存在堆内存中的对象。
2、ECMAScript中所有函数的参数都是按值传递的。在向参数传递引用类型的值时,会把这个值在内存中的地址赋值给一个局部变量,因此这个局部变量的变化会反映在函数的外部。
3、使用typeof检测变量是不是基本数据类型,使用instanceof检测变量是不是引用类型值。person instanceof Object返回true。
4、所有引用类型的值都是Object的实例。
5、所有全部变量和函数都是作为window对象的属性和方法创建的。
6、JavaScript没有款及作用域。所以对于JavaScript来说,由for语句创建的变量i即使在for循环执行结束后,也依旧会存在于循环外部的执行环境中。
7、JavaScript具有自动垃圾收集机制,开发人员不用再关心内存使用问题,所需内存的分配以及无用内存的回收完全实现了自动管理。
8、“标记清除”是目前主流的垃圾收集算法,这种算法的思想是给当前不用的值加上标记,然后再回收其内存。