首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > Ruby Rails >

各路大侠来看看,这个是闭包还是什么原理?解决思路

2012-04-28 
各路大侠来看看,这个是闭包还是什么原理?script typetext/javascriptvar testOnefunction Test1() {

各路大侠来看看,这个是闭包还是什么原理?
<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

JScript code
var a = {a:1};var b = a;var c = a;b = null;alert(c.a) 

热点排行