在对象文字中访问上面定义的变量会导致ReferenceError

时间:2013-03-08 21:21:45

标签: javascript variables referenceerror

var g = {
    lang: "ttt",
    l: function(){
        console.log(lang);
    }
}

console.log(g.l());
  

ReferenceError:未定义lang

为什么lang未定义?

2 个答案:

答案 0 :(得分:5)

您需要使用g.langthis.langthis会引用g对象,除非使用.call().apply()

例如,这将导致未定义:

var g = {
    lang: "ttt",
    l: function(){
        console.log(this.lang);
    }
}

console.log(g.l.call(Math));

然而,这将始终给出正确的结果(如果您不重新分配g):

var g = {
    lang: "ttt",
    l: function(){
        console.log(g.lang);
    }
}

console.log(g.l.call(Math));

答案 1 :(得分:3)

因为this - 与Java不同 - 从不是范围链查找的一部分。修复:

var g = {
    lang: "ttt",
    l: function(){
        console.log(this.lang);
    }
}

console.log(g.l());