各路大侠来看看,这个是闭包还是什么原理?
<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函数 里的参数传入的到底是值还是引用,
如果是值,为什么改变了属性值,函数外使用也改变了.
如果是引用,为什么函数里都是赋为空了,外面仍然能访问.
第二:如果是全局变量,无论在函数里还是外赋值为空,就彻底被消灭了.
如果不是传值来赋为空,在申明的作用域里赋为空,也会被消灭.
描述可能有点混乱,但是大牛应该能懂我的意思,现在仅仅能知道结果,不知道原理,十分不爽,求解释下原理.十分感谢!
------解决方案--------------------
参数为对象时是引用传递,你在里面对其属性的修改都要体现在外面的对象上,而在函数里面将其置为空,只是将参数置为空,原来的对象纹丝未动
------解决方案--------------------
其实闭包就是将函数返回,并且连同他的活动变量一起,就这么简单啊。
http://blog.csdn.net/a569171010/article/details/7484461
希望对你有帮助。