因為,在js中,如果某個變量沒有var聲明,會自動移到上一層作用域中去找這個變量的聲明語句,如果找到,就是用,如果沒找到,
就繼續向上尋找,一直查找到全局作用域為止,如果全局中仍然沒有這個變量的聲明語句,那么自動在全局作用域進行聲明,這個就
是js中的作用域鏈,也叫變量提升
代碼示例如下:
var data = 10;
function fn1() {
var data = 100;
alert(data);//此時的data為100
fn2();
alert(data); //此時的data為10000
function fn2() {
data = 1000;
fn3();
function fn3() {
data = 10000;
}
}
}
fn1();
console.log(data); //此時的data為10
由此可知,上面代碼中,fn1函數里面由於data用關鍵字var來聲明了,所以這里面的data職能找到函數里面的最頂層的var data進行賦值替換,而不會影響到外面用var 來聲明的data