2013-08-06 84 views
0

所以我試圖獲得JavaScript範圍的句柄並查找大量有關它的信息。我看到很多關於人們意外地將局部變量與全局變量相沖突的問題。重新定義具有衝突局部變量的全局變量

但我想知道是否有辦法改變全局變量,儘管有衝突的局部變量。 像:

var globalVariable = 6; 

    var func1 = function() { 
     this.func2 = function() { 
      var globalVariable = 99; 
        = 7; 
     } 
    }; 
    print(globalVariable); 

有沒有辦法來改變全局變量值,儘管衝突的局部變量的名字嗎?

當我試着this.globalVariable = 7打印7作爲輸出,它沒有工作。任何人都可以明確爲什麼this.訪問不起作用,或者如果偶爾有一種方法來更改全局變量,如果碰巧存在一個衝突名稱的本地?

顯然這樣寫代碼沒有意義,但我想我明白this.關鍵字總是指定全局變量/對象?

+0

http://stackoverflow.com/questions/3127429/javascript-this-keyword的可能的複製 – woofmeow

回答

0

「我以爲我明白this.關鍵字總是指定全局變量/ object?」

this值取決於函數是如何被調用以及是否功能在strict mode

在瀏覽器中的全局變量是window對象的屬性,所以使用:

window.globalVariable = 7; 

有時this等於window,但往往事實並非如此。 (我的意思並不是說聽起來像this只是被隨機設置;還有就是應用specific set of rules

請注意,如果你發現自己需要的全局變量和這樣的局部變量之間的區別,你很可能會被使用太多的全局變量。

0

你可以使用window ['globalVariable'] = 7;

雖然這不是一個好的解決方案。真的沒有。

「此」變量指的是範圍當前函數具有,通常,除非它被綁定到別的東西或被叫/施加(.CALL /。適用)。我建議谷歌功能的範圍,因爲它可以變得相當混亂。

如果您有任何其他問題(thetenfold),我在Skype上。

+0

'this'和範圍是兩回事。函數的作用域取決於它被定義的位置(即,它嵌套在哪個(或哪些)函數中),而不管「this」可能被設置爲什麼。 – nnnnnn