1、变量
① 变量分类:基本类型值:简单数据段,就是最基本的5种数据类型,不能给他们添加属性引用类型值:即对象,可以为其添加方法
两种区别:1、保存方式不同:基本类型值在内存中占据固定大小的空间,会被保存在栈中
引用类型值时对象,会保存在堆中
基本类型正常,对象只能操作对他的引用,不能直接操作对象本身
2、 复制变量值方式不同:基本变量复制,var num1 = 5;var num2 = num1;
会创建一个新的值,与原值互相不干预
引用型(对象)复制,var obj1 = new Object();
var obj2 = obj1;
实际上是复制了一个指针,这个指针指向存储在堆中的对象
此时原值与新值都是指向同一个对象的指针引用,所以改变其中一个,另一个也会跟着变。
② js中变量超级随意,不像别的语言定义变量要保存数据类型值,js的变量在脚本的生命周期内,值与类型都可以随意转变。
③ 检测类型:typeof()
④ 作用域链:就是一个变量的作用域,记住:子可以访问父中的变量,父不能访问子中变量
延长作用域链方法:with(...) //with函数类比link,把其他的东西连接到此处
try-catch //抛出局部错误到全局
⑤ js无块级作用域:
if(true){
var color = "blue";
}
alert(color); //"blue"
for(var i =0;i<10;i++){
dosomething(i);
}
alert(i); // "10"
在别的语言中,color与i会只作用于花括号里,但是在js中,没有块级作用域,就是相当于花括号不存在,color与i在此处相当于全局变量。
2、内存管理
① 垃圾收集:js自带垃圾收集机制。最常用的方法:标记清除。变量进出环境时会被打标记。
另一种方法:引用计数
② 管理内存:对于局部变量,离开作用域自己被回收,所以不用管
对于全局变量和全局对象,不用了最好把它设置为null