@
pythonee 不好意思,你在5楼说的那句话我理解不能 -_- ||
其实这个问题和闭包无关,"闭包内部存的是引用" 这句话本身就是个伪命题,可能是楼主把哪个人说的话理解错了吧。
闭包就是一个类似屏障的东西,闭包里能访问外部的变量,但外部没法直接访问闭包里的变量,它不牵扯到“引用”的问题。
以前看过一个文章对这个问题讲得很生动,但现在找不到了。我把大意说一下吧:
想象 javascript 中的每一个对象就是一个人(包括字符串,数组,object),变量名就是它的名字
a = {"id" : 1} 就是给 {"id" : 1} 起了个名字,叫 "a"
b = a 就是给 {"id" : 1} 起了个外号,叫 "b"
现在无论你调用 a 还是 b ,得到的都是 {"id" : 1} 这个人
a.foo = 'bar'
alert(b.foo) // 输出 'bar'
那么,如果我们这样操作:b = {"id" : 2} 这代表什么呢?
这个操作同时带来两个效果:
1. 取消了 {"id" : 1} 的外号,现在他只有 "a" 这个一个名字了,"b" 这个外号给了别人
2. 给 {"id" : 2} 起了一个名字,也就是 "b"
现在你在调用 a 进行操作,就不会再对 b 有什么影响了