ES5中js的作用域和變量提升
ES5 中JS 的作用域:
在ES5 中,JS 只有兩種形式的作用域:全局作用域和函數(shù)作用域。
全局作用域
全局對象的作用域,任何地方都可以訪問到(如果沒有被函數(shù)作用域覆蓋)。
函數(shù)作用域
整個函數(shù)的范圍內(nèi)可訪問。
變量提升:
ES5 中存在變量提升,ES6 中并不存在變量提升。因此下面的內(nèi)容只針對ES5。
ES5 中變量聲明會提升到它所在 作用域的頂端 去執(zhí)行。
以下兩段示例代碼是一樣的結(jié)果:
代碼1:
a = 5; // 變量 a 設(shè)置值為 5
console.log(a);
var a; // 聲明 a
代碼2:
var b; // 聲明 b
b = 5; // 變量 b 設(shè)置值為 5
console.log(b);
函數(shù)聲明和變量聲明總是會被解釋器悄悄地被"提升"到方法體的最頂部。
但是需要注意的是:被初始化的變量不會提升
以下兩段示例代碼是不一樣的結(jié)果:
代碼1:
var x = 5; // 初始化 x
console.log(x + y);//12
var y = 7; // 初始化 y
代碼2:
var x = 5; // 初始化 x
console.log(x + y);//NaN
var y = 7; // 初始化 y
擴展:
console.log(v1);
var v1 = 100;
function foo() {
console.log(v1);
var v1 = 200;
console.log(v1);
}
foo();
console.log(v1);
打印結(jié)果為:

image.png