JS var函数

时间:2013-03-27 19:09:29

标签: javascript jquery

请查看以下代码:

var test = {

    test2 : {
        variable: 'hello world',

        test3: {
            test4 : test.test2.variable  
        },

        echo : function() {
            alert(test.test2.test3.test4);   
        }
    }

};

test.test2.echo();

jsfiddle

为什么test4不能访问变量:

test4 : test.test2.variable 

请随意修改我的标题,我找不到更好的标题。

谢谢!

3 个答案:

答案 0 :(得分:5)

test在评估undefined时为test.test2.variable

表达式由内而外评估,因此您的代码按以下顺序执行以下操作:

  1. 创建对象
  2. 创建对象
  3. variable属性附加到(2)
  4. 创建另一个对象
  5. test4属性附加到(4),其值是评估test.test2.variable的结果(此失败,因为直到(1)才分配测试)
  6. test3属性附加到值为(4)
  7. 的第一个属性
  8. 创建一个函数实例
  9. echo属性附加到(2)
  10. test2属性附加到指向(2)
  11. 的(1)
  12. 将(1)分配给变量test
  13. 如果您可以依赖现代浏览器并且不太可能经常阅读,或者您可以在test正确初始化后分配它,则可以使用下面的getter来延迟对(5)的评估。

     var test = { 
       test2: {
         variable: "foo",
         test3: {
           get test4 () { return test.test2.variable; }
         }
       }
     };
    

    或更向后兼容

     var test = {
       test2: {
         variable: "foo",
         test3: {
           test4: null
         }
       }
     }
     test.test2.test3.test4 = test.test2.variable;
    

答案 1 :(得分:3)

因为test尚未分配。 Javascript解释器首先解析右侧的JSON文字,然后将值赋给test变量:

var test = {...}

要修复它,你可以这样做:

var test = {
    test2 : {
        variable: 'hello world',
        test3: {

        },
        echo : function() {
            alert(test.test2.test3.test4);   
        }
    }
};
test.test3.test4 = test.test2.variable;

答案 2 :(得分:0)

这应该有效。 自从迈克塞缪尔给出了一个很好的解释以来,我没有解释过。

var test = {

    test2 : {
        variable: 'hello world',

        test3: {
            test4 : function (){return test.test2.variable  }
        },

        echo : function() {
            alert(test.test2.test3.test4());   
        }
    }        
};

test.test2.echo();