变量、作用域、内存问题
1、 基本类型值是指简单的数据段,引用类型值是指可能有多个值构成的对象,(是保存在内存当中的)。String不是引用类型在JavaScript中。
2、 基本类型变量是值操作的,直接改变变量的实际值;引用类型的值是引用访问的,操作的是引用而不是直接对象。
3、 赋值
基本类型赋值的是对象本身,引用类型变量赋值的是对象的引用。
4、 参数按值传递
基本类型变量是传值,引用类型变量传地址。
5、 检测变量类型
A、Typeof() null也属于object对象
但是对于检测引用类型变量来说,还是应该用
B、a instanceof b
alert(person instanceof Object); // 变量 person 是 Object 吗?
alert(colors instanceof Array); // 变量 colors 是 Array 吗?
alert(pattern instanceof RegExp); // 变量 pattern 是 RegExp 吗?
注意:所有引用类型值都是object对象
6、 没有块级作用域
A、
if (true) {
var color = "blue";
}
alert(color); //"blue"
B、
for (vari=0; i < 10; i++){
doSomething(i);
}
alert(i); //10
7、 垃圾收集
JavaScript采用的是自动垃圾回收机制。局部变量只有字函数运行时才起作用
标识无用变量的方式:
a. 清除标识
垃圾收集器会在运行时为所有存储在内存的变量加上标识,然后去除环境的变量和被环境变量引用变量的标识,之后就清除那些带有标示的标记。
b. 引用计数
记录一个变量被引用的次数,如果为0则回收。可能会产生循环引用的问题
8、 解除引用
优化内存占用:将不用的全局对象或者属性手动赋值为null
9、 执行环境
全局环境和函数环境,变量执行环境有利于垃圾回收。