- 無塊作用域元旬,C語言中{}中定義的變量在外部是無法訪問和使用的榴徐,但JS不會銷毀這些臨時變量。
for (var i=0; i < 10; i++)
{ doSomething(i);
}
alert(i); //10
if (true) {
var color = "blue";
}
alert(color); //"blue"
- 使用var 聲明的變量會自動被添加到最接近的環(huán)境中匀归。在函數(shù)內(nèi)部坑资,最接近的環(huán)境就是函數(shù)的局部環(huán)境;在with 語句中穆端,最接近的環(huán)境是函數(shù)環(huán)境袱贮。如果初始化變量時沒有使用var 聲明,該變量會自動被添加到全局環(huán)境体啰。
function add(num1, num2) {
sum = num1 + num2; // 如果沒有加var則會變成全局變量....加var則無法在外部訪問攒巍。
return sum;
}
var result = add(10, 20); //30
alert(sum); //30
function f1(){
var n=999;
nAdd=function(){n+=1}
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result(); // 999
nAdd(); // 因為是全局變量(nAdd 沒加var),所以可以直接訪問荒勇。
result(); // 1000
變量在局部沒聲明也沒關系柒莉,可以跳出{}找外面一層的變量代替。
var color = "blue";
function getColor(){
return color;
}
alert(getColor()); //"blue"
如果想引用外面的全局變量怎么辦沽翔?
window.變量名就可以了兢孝,如果不是在對象中的話this也行,但不推薦仅偎。
JS代碼函數(shù)嵌套時的作用域 :
function f1(){
n=999;
function f2(){
alert(n); // 999
}
}
在上面的代碼中跨蟹,函數(shù)f2就被包括在函數(shù)f1內(nèi)部,這時f1內(nèi)部的所有局部變量橘沥,對f2都是可見的窗轩。但是反過來就不行,f2內(nèi)部的局部變量座咆,對f1 就是不可見的品姓。這就是Javascript語言特有的“鏈式作用域”結構(chain scope)寝并,子對象會一級一級地向上尋找所有父對象的變量。所以腹备,父對象的所有變量衬潦,對子對象都是可見的,反之則不成立植酥。