各路大侠来看看,这个是闭包还是什么原理?
<script type="text/javascript">
var testOne;
function Test1() {
this.a = 1;
}
function Test2(t) {
t.a = 2;
t = null;
t = {};
testOne = null;
alert(t.a);//undefined
}
function Main() {
testOne = new Test1();
var testTwo = new Test1();
//testOne = null;//在这里直接赋为空,对象也被消灭了
//testTwo = null;//在这里直接赋为空,对象也被消灭了
Test2(testOne);
Test2(testTwo);
if (testOne) {//全局变量,对象已经为空 不满足条件
alert(testOne.a);
}
alert(testTwo.a);//仍然显示 2
}
</script>
我想问的是,
第一:Test2函数 里的参数传入的到底是值还是引用,
如果是值,为什么改变了属性值,函数外使用也改变了.
如果是引用,为什么函数里都是赋为空了,外面仍然能访问.
第二:如果是全局变量,无论在函数里还是外赋值为空,就彻底被消灭了.
如果不是传值来赋为空,在申明的作用域里赋为空,也会被消灭.
描述可能有点混乱,但是大牛应该能懂我的意思,现在仅仅能知道结果,不知道原理,十分不爽,求解释下原理.十分感谢!
[解决办法]
引用是一个地址
两个变量存储同一个地址
把一个变量赋为null,只是把变量设为null,并不没有把变量里存储的地址里的东西设为null
var a = {a:1};var b = a;var c = a;b = null;alert(c.a)