var test = 333;
    var obj = {
        a:test,
        b:function () {
            test=222;
            return test;
        }
    };
    var test = 111;    console.log(test);
    console.log(obj.a);
   console.log(obj.b());
    console.log(obj.a);
    console.log(test);
}

解决方案 »

  1.   

        var test = 333;
        var obj = {
            a:test,//test的值是333,obj.a也是333
            b:function () {//这个函数内的代码要在调用obj.b()时才执行
                test=222;
                return test;
            }
        };
        var test = 111;//test重新赋值111,obj.a不受影响    console.log(test);//test是111
        console.log(obj.a);//obj.a是333
       console.log(obj.b());//这时调用obj.b(),test重新赋值222
        console.log(obj.a);//obj.a还是333
        console.log(test);//test是222
      

  2.   

    为什么最后的test改了222,而a.test还是333呢?b函数里的值,有没有修改全局test=333的值?
      

  3.   

    a:test 只是把test当时的值赋值给obj.a。在这之后两者之间就没有关联了。对之后test重新赋值,obj.a也不受影响。
    b函数里的test就是全局变量。修改的就是全局test的值。
      

  4.   

    obj = {
            a:333,
    ...
            }
    被创建的时候实际上就是这样了  之后除非你重新给obj.a赋值   否则是不会发生变化的