JavaScript入门教程

JavaScript简介
JavaScript语法基础
JavaScript流程控制
JavaScript函数
面向对象编程
JavaScript事件
JavaScript DOM
正则表达式
JavaScript BOM
AJAX

专题分析

浏览器兼容性
JS优化
Web前端开发规范
编辑器推荐
总结和笔记

学习助手

对象参考手册
ECMAScript分析
数据中心
QQ交流群

JS引用

引用是一个比较有意思的主题,跟其他的语言不同的是,JavaScript 中的引用始终指向最终的对象,而并非引用本身,我们来看一个例子:
    var obj = {};//空对象
    var ref = obj;//引用
    obj.name = "objectA";
    print(ref.name);//ref跟着添加了name属性
    obj = ["one", "two", "three"];//obj指向了另一个对象(数组对象)
    print(ref.name);//ref还指向原来的对象
    print(obj.length);//3
    print(ref.length);//undefined

运行结果如下:
objectA
objectA
3
undefined

obj 只是对一个匿名对象的引用,所以,ref 并非指向它,当 obj 指向另一个数组对象时可以看到,引用 ref 并未改变,而始终指向这那个后来添加了 name 属性的"空"对象”{}”。

理解这一点对后边的内容有很大的帮助。再看这个例子:
    var obj = {};//新建一个对象,并被obj引用
    var ref1 = obj;//ref1引用obj,事实上是引用obj引用的空对象
    var ref2 = obj;
    obj.func = "function";
    print(ref1.func);
    print(ref2.func);
声明一个对象,然后用两个引用来引用这个对象,然后修改原始的对象,注意这两步的顺序,运行之:
function
function

根据运行结果我们可以看出,在定义了引用之后,修改原始的那个对象会影响到其引用上,这一点也应该注意。