2015-05-02 202 views
0
var tempOut = false; 
var foo = function() { 
    this.tempIn = false; 

    this.counter = function() { 
     setTimeout(function() { 
      this.tempIn = true; 
      tempOut = true; 
     },5000); 
    }; 
}; 

var myFunction = new foo(); 
myFunction.counter(); 
console.log(tempOut+ " " + myFunction.tempIn); 

嘿那裏,我有一個簡單的代碼,5秒後更改變量。 有2個變量:一個全局(tempOut)和一個本地(tempIn)。當我創建對象從功能foo,並啓動計數器函數5秒後,兩個變量都應設置爲true,但只有tempOut更改。我做錯了什麼?JavaScript改變對象內部的變量

回答

1

你的代碼改成這樣:

var foo = function() { 
    this.tempIn = false; 
    var me = this; 
    this.counter = function() { 
     setTimeout(function() { 
      me.tempIn = true; 
      tempOut = true; 
     },5000); 
    }; 
}; 

你的「本」方面是不是在正確的目標指向,在一個瀏覽器,它引用的setTimeout內窗口。

看一看這個,範圍是JS有點mindbending:http://ryanmorr.com/understanding-scope-and-context-in-javascript/

+1

'this',計時器內,指向'window'對象。 –

+1

加入了我的帖子。 – garryp

+0

非常感謝。我非常感謝你的幫助。 – Humberd