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

console.log(g.l());

ReferenceError: 言語が定義されていません

lang が定義されていないのはなぜですか?

4

2 に答える 2

5

g.langまたは のいずれかを使用する必要がありますthis.lang。orが使用されない限り、オブジェクトthisを参照します。g.call().apply()

たとえば、これは undefined になります。

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));
于 2013-03-08T21:23:17.093 に答える
3

thisたとえば、Java とは異なり、スコープ チェーン ルックアップの一部ではないためです。修正:

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

console.log(g.l());
于 2013-03-08T21:22:51.127 に答える