????任何程序設計語言都有作用域的概念,簡單的說衫嵌,作用域就是變量與函數(shù)的可訪問范圍浸锨,即作用域控制著變量與函數(shù)的可見性和生命周期。在JavaScript中介却,變量的作用域有全局作用域和局部作用域兩種。
全局作用域(Global Scope)
????在代碼中任何地方都能訪問到的對象擁有全局作用域块茁,一般來說以下幾種情形擁有全局作用域:
(1)在最外層函數(shù)外面定義的變量擁有全局作用域
var authorName="山邊小溪";
function doSomething(){
var blogName="夢想天空";
function innerSay(){
alert(blogName);
}
innerSay();
}
alert(authorName);
alert(blogName);
doSomething();
innerSay() ;
(2)所有末定義直接賦值的變量自動聲明為擁有全局作用域齿坷,例如:
function doSomething(){
var authorName="山邊小溪";
blogName="夢想天空";
alert(authorName);
}
doSomething();
alert(blogName);
alert(authorName);
(3)所有window對象的屬性擁有全局作用域
一般情況下,window對象的內置屬性都擁有全局作用域数焊,例如window.name永淌、window.location、window.top等等佩耳。
局部作用域(Local Scope)
????和全局作用域相反遂蛀,局部作用域一般只在固定的代碼片段內可訪問到,最常見的例如函數(shù)內部干厚,所有在一些地方也會看到有人把這種作用域稱為函數(shù)作用域李滴,例如下列代碼中的blogName和函數(shù)innerSay都只擁有局部作用域
作用域鏈(Scope Chain)
????由于js的變量都是對象的屬性,而該對象可能又是其它對象的屬性蛮瞄,而所有的對象都是window對象的屬性所坯,所以這些對象的關系可以看作是一條鏈 ,鏈頭就是變量所處的對象,鏈尾就是window對象