我正在寫一個JavaScript應用程序,我想在全局範圍訪問我的應用程序變量。事情是這樣的:引用Javascript訪問成員變量
//Initialize
var myApp=new app();
//Count is zero here, as expected since app is asynchronous
console.log(myApp.count);
//But 5 seconds later, count should have a non-zero value
setTimeout(function(){
console.log(myApp.count);
}, 5000);
以及應用程序代碼:
//Application code
function app() {
var count=0;
setTimeout(function(){
console.log("Setting count to 10");
count=10;
}, 2500);
//Member variable for count
this.count=count;
}
想在這裏看到的jsfiddle: https://jsfiddle.net/o4db2ep4/
我想要的是用於計數的第一次訪問是零,但第二個應該是10.
我認爲發生的事情是,當我聲明myApp時,它獲得count的值爲零。這就像一個價值/參考問題與範圍相結合的傳遞,我正在爲此付出努力。
如何獲得對動態的app.count的引用,即始終包含count的當前值,而不是賦值時的值?如果這不可能,我該如何重新考慮這個問題?
'setTimeout'不會暫停腳本。它只是調度你提供的函數以便稍後運行,所以'this.count = count'在'setTimeout'回調執行之前就已經執行了。 – 2016-03-28 02:10:19
是的,我明白這一點。但是如果app.count是一個指向this.count的指針,那麼無論何時運行,它們都會一直引用相同的值。 – jrel
JavaScript嚴格按價值傳遞/分配。一個變量/屬性不能引用另一個變量/屬性。 –