1. 全局作用域
全局變量擁有全局作用域
2. 函數(shù)作用域
在函數(shù)內(nèi)聲明的變量用于函數(shù)作用域外恕。
在函數(shù)體內(nèi)硬纤,局部變量的優(yōu)先級(jí)高于同名的全局變量盹沈。
2.1 聲明提前
函數(shù)作用域:在函數(shù)內(nèi)聲明的所有變量在函數(shù)體內(nèi)始終是可見(jiàn)的。即JavaScript中所有變量的聲明动壤,都被提前至函數(shù)體的頂部锅风。
[JavaScript]
function test(o) {
var i = 0;
if (typeof o == "object") {
var j = 325;
for (var k = 0; k < 5; k++) {
console.log(k);
}
console.log("for循環(huán)語(yǔ)句外:" + k); //=> "for循環(huán)語(yǔ)句外:5"
}
console.log("if條件語(yǔ)句外:" + j); //=>"if條件語(yǔ)句外:325"
}
//等價(jià)版本(聲明提前版本)
function testV2(o) {
var i = 0;
var j; //聲明提前
var k; //聲明提前
if (typeof o == "object") {
j = 325;
for (k = 0; k < 5; k++) {
console.log(k);
}
console.log("for循環(huán)語(yǔ)句外:" + k);
}
console.log("if條件語(yǔ)句外:" + j);
}
var obj = {
x: 1
};
test(obj);
testV2(obj);
[JavaScript]
var scope = "global";
function f() {
console.log(scope); //=>"undefined"酥诽,而不是"global"
//局部變量在這里聲明并初始化,但變量在函數(shù)體內(nèi)任何地方均是有定義的皱埠。同名局部變量覆蓋了全局變量肮帐。
var scope = "local";
console.log(scope); //=>"local"
}
f();
//等價(jià)版本(聲明提前版本)
function fV2() {
var scope; //聲明提前
console.log(scope); //=>"undefined"
scope = "local";
console.log(scope); //=>"local"
}
fV2();