佛山出格建站總排行榜總點(diǎn)擊榜總收藏榜
概念:它是指對(duì)某一變量和方法具有訪問權(quán)限的代碼空間, 在JS中, 作用域是在函數(shù)中維護(hù)的。表示變量 或函數(shù)起作用的區(qū)域,指代了它們?cè)谑裁礃拥纳舷挛闹袌?zhí)行,亦即上下文執(zhí)行環(huán)境。
ES5的作用域只有兩種:全局作用域和局部作用域
全局作用域
var a=1; //全局作用域
function fn1(){console.log(a)
};
fn1()
局部作用域
function fn1(){var a=1; //局部作用域
};
fn1();
console.log(a);
全局變量和局部變量同名的坑
(1)在全局變量和局部變量不同名時(shí),其作用域是整個(gè)程序。
(2)在全局變量和局部變量同名時(shí),全局變量的作用域不包含同名局部變量的作用域。
var a=1;
function fn1(){console.log(a)var a = 2;
};
fn1();
console.log(a); undefined //var聲明會(huì)進(jìn)行預(yù)解析 提前
1 //拿到的是全局變量
經(jīng)典作用域面試題
var a = 10;
function f1(){ var b = 2 * a; var a = 20;var c = a+1; console.log(b); console.log(c);
}
f1()NaN // 首先內(nèi)部a會(huì)提前進(jìn)行預(yù)解析 變量提升 是undefined * 2
21 // 此時(shí)預(yù)解析 a=20 + 1
var a=10;
function test(){console.log(a);a=100;console.log(this.a); var a;console.log(a);
}
test();undefined // 首先test'調(diào)用' 會(huì)去內(nèi)部查找變量 var a 會(huì)進(jìn)行預(yù)解析 此時(shí)只是聲明了 但是沒賦值10 // this 相當(dāng)于拿到的全局變量 指向的是window100 // 前面賦值 a = 100