基本类型值:简单的数据段 Undefined Null Boolean Number和String
引用类型值: 可能由多个值构成的对象。引用类型的值可以动态的添加属性和方法
var person = new Object();
person.name="xxx";
alert(person.name);
基本类型的值的复制是 值拷贝 复制引用类型的值是 拷贝指针,而不是复制实际的值。复制之后两个东西都指向同一个地方。
所有函数的参数都是按值传递的。 对于简单类型就是值拷贝,对于对象传的是地址,所以函数内外都指向同一个区域
(对象不是按引用传递,是按值传递,传的是地址)
function setName(obj)
{
obj.name="Nicholas";
obj=new Object();
ojb.name="Greg";
}
var person == new Object();
setName(pserson);
alert(pserson.name)// "Nicholas" 如果对象是按照引用传递的 则 这个时候应该显示 Greg
检测类型:检测一个变量是什么基本数据类型,typeof是最佳的工具。但是对于检测引用类型的值时,typeof 一般都会返回 Object ,我们知道这个 意义不大,需要具体是什么类型的对象 因此引入 instanceof 。如果变量是给定引用类型的实例,则返回true; eg person instanceof Object 。 如果用instanceof 检测基本类新的值,则该操作始终会返回false。
执行环境:定义了变量或函数有权访问的数据。每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中。在web浏览器中 全局执行环境被认为是window对象,因此所有全局变量和函数都是作为window对象的属性和方法创建的。某个执行环境中所有的代码执行完毕后 该环境被销毁,保存在其中的变量和函数定义也随之销毁。
作用域链:保证对执行环境有权访问的所有变量和函数的有序访问。作用域链的前端始终都是当前执行的代码所在环境的变量对象。 最末端是全局执行环境的变量对象。 标识符解析是沿着作用域链一级一级搜索的过程。从最前端开始,找到则停止。 找不到将会发生错误。
延长作用域链:try-catch 语句的 catch 块 和 with语句 。 略
JS木有块级作用域链:
for (var i =0;i<10;i++)
{
doSomething(i);
}
alert(i)// 显示10
如果木有用var 声明的变量 则添加到全局环境。用var声明的变量会添加到最近的环境。
垃圾清除的两种方式:标记清除 和 引用计数(不能解决循环引用的问题)
在部分浏览器中是支持手动回收内存的,但不建议这样做 (IE: window.CollectGarbage() Opera7 : window.opera.collect())。好的习惯是手动接触引用,确保内存释放。 不需要的保存对象的变量用null初始化