0
   var x = 5,
    o = {
        x: 10,
        doIt: function doIt(){
            var x = 20;
            setTimeout(function(){
                alert(this.x);
            }, 10);
        }
    };
o.doIt();

なぜこれはを参照しているのですかwindow object rather than o。私はobject oコンテキスト内にいるので、10を正しく印刷する必要がありますか?

4

3 に答える 3

4

匿名関数は10ms後に実行されo、その時点では実行コンテキストはありません。

JavaScriptクロージャはどのように機能しますか?への回答を確認してください。

于 2012-12-31T07:52:38.717 に答える
0

このアラートを20にするthis.xには、単にに変更しますx

于 2012-12-31T07:54:41.080 に答える
0
var x = 5,
    o = {
        x: 10,
        doIt: function doIt(){
            var x = 20;
            setTimeout(function(){
                alert(this.x);
            }, 10);
        }
    };
o.doIt();

渡されるすべての関数setTimeout()はで実行されますglobal scope。this.xはwindow.xと同じであるため、値は5です。

于 2012-12-31T08:02:46.003 に答える