各路大侠来见见,这个是闭包还是什么原理

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

试试