在js中如果用var來定義乙個變數,如果該變數被定義在function或者其他迴圈體內,則變數為區域性變數,並且該變數不會受到同名全域性變數的影響,也不會影響同名的全域性變數。如果不用var來定義變數而直接拿乙個變數來使用則該變數會被自己定義為全域性變數,無論該變數被定義在任何位置,如果在function或者迴圈體內用這種方式來定義變數,則該變數為全域性變數若function或迴圈體外已經定義了同名的全域性變數,則會直接引用function或迴圈體外定義的全域性變數。
注意:js中,乙個函式裡面若有迴圈體,則在迴圈體中定義的變數作於域會是整個函式,這一點根其他高階語言不一樣。下面例子中的testvar(),在for迴圈中定義了乙個區域性變數i,該i的作用域就為整個函式體。
例子:function testnovar()
alert("testnovar "+i);
}function testvar()
alert("testvar "+i);
}testnovar();
trycatch(e)
testvar();
trycatch(e)
testnovar中迴圈體內的i沒有用var來定義,該i為全域性變數。而testvar中的迴圈體用var定義了i,該i為區域性變數,於是它不受到前面定義的全域性變數的影響,所以該例子列印結果的先後循序為:
"testnovar 5" -> "behind testnovar i value :5" -> "testvar 6" -> "behind testvar i value :5"
全域性變數 靜態全域性變數 靜態區域性變數 區域性變數
全域性和靜態變數都在堆裡。這句話應該錯了,應該是放在常量資料段 全域性變數的作用範圍是整個程式 如果程式是多個檔案,必須在其他的檔案中說明 靜態變數的作用範圍要看靜態變數的位置,如果在函式裡,則作用範圍 就是這個函式。靜態全域性變數,只在本檔案可以用,雖然整個程式包含多個檔案,但靜態全域性變數只能用...
全域性變數 靜態全域性變數 靜態區域性變數 區域性變數
全域性和靜態變數都在堆裡。全域性變數的作用範圍是整個程式 如果程式是多個檔案,必須在其他的檔案中說明 靜態變數的作用範圍要看靜態變數的位置,如果在函式裡,則作用範圍 就是這個函式。靜態全域性變數,只在本檔案可以用,雖然整個程式包含多個檔案,但靜態全域性變數只能用在定義它的那個檔案裡,卻不能用在程式中...
全域性變數 靜態全域性變數區域性變數 靜態區域性變數
對於乙個完整的程式,在記憶體中的分布情況如下圖 區 low address 全域性資料區 堆區 棧區 high address 一般程式把新產生的動態資料存放在堆區,函式內部的自動變數存放在棧區。自動變數一般會隨著函式的退出而釋放空間,靜態資料 即使是函式內部的靜態區域性變數 也存放在全域性資料區。...