日期:2014-05-16  浏览次数:20327 次

各路大侠来看看,这个是闭包还是什么原理?
<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
希望对你有帮助。