和其它语言一样,JavaScript对值和引用的操作对数据的影响大相径庭。
使用值 使用引用
复制 实际复制的是值,存在两个不 复制的只是对值得引用。如果通过这个新的引用
同的、独立的副本 修改了数值,这个改变对原始的引用来说也可见
传递 传递给函数的是值的一个独立 传递个函数的是对数值的一个引用。
的副本,对它的改变在函数外 如果通过传递给它的引用修改了数值
部没有影响 这个改变在函数外部可见
比较 比较的两个独立的值(通常逐 比较的是两个引用,以判断它们引用
字节比较),以判断它们是否 的是否是同一个数值。对两个不同的
相同 数值的引用不相等,即使两个值相等
在JavaScript中,对基本类型的数据操作使用值,对引用类型的数据操作使用引用。需要注意的是,字符串在JavaScript中操作使用的是值(C、C++和Java中都是使用类型引用)。
Function()构造函数和函数直接量存在重要差别:
首先,构造函数Function()允许在运行时动态创建和编译JavaScript代码,而函数直接量却是程序结构的一格静态部分,就像function语句。
其次,作为第一个差别的必然结果,每次调用构造函数Function()时都会解析函数体并创建一个新的函数对象。
第三,使用Function()构造函数创建的函数不使用词法作用域,相反,它们总是被当作顶级函数编译。如
var y = "global";
function a(){
var y = "local";
return new Function("return y"); //不捕捉局部作用域
}
alert(a()); //显示"global"