javascript作用域就是變量和函數的可通路範圍。
1.變量作用域
在javascript中,變量作用域分為全局作用域和局部作用域。
全局作用域
任何地方都可以定義擁有全局作用域的變量
1.沒有用var聲明的變量(除去函數的參數)都具有全局作用域,成為全局變量,是以聲明局部變量必須要用var
2.window的所有屬性都具有全局作用域
3.最外層函數體外聲明的變量也具有全局作用域


局部作用域
1.函數體内用var聲明的變量具有局部作用域,成為局部變量
2.函數的參數也具有局部作用域


總結:在函數體内局部變量的優先級高于同名的全局變量,聲明局部變量必須用var
2.函數作用域
一些類c語言是塊級作用域(block scope),每一個花括号是一個作用域,花括号内的代碼對外是不可見的。而
javascript是函數作用域(function scope),沒有塊級作用域。無論函數體内的變量在什麼地方聲明,對整個函數都是可見的,即javascript函數裡聲明的所有變量都被提前到函數體的頂部,隻是提前變量聲明,變量的指派還是保留在原位置
函數作用域隻能用函數來聲明獨立作用域,并不是每一個花括号都是一個獨立作用域,例如:for循環并不能建立一個局部的作用域


3.作用域鍊
作用域鍊:javascript的變量都是對象的屬性,而該對象可能又是其它對象的屬性,而所有的對象都是全局對象的屬性,是以這些對象的關系可以看作是一條鍊,
鍊頭就是變量所處的對象,鍊尾就是全局對象
在查找變量funscope的值時,會先查找目前對象,如果目前對象查不到就繼續查找作用域鍊上面的下一個對象,如果作用域鍊上沒有一個對象包含此屬性,就抛出引用錯誤。
在不包含嵌套的函數體内,作用域鍊上有兩個對象:
1.定義函數參數和局部變量的對象
2.全局對象
在包含嵌套的函數體内,作用域鍊上至少有三個對象
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。
轉載:http://www.cnblogs.com/greenteaone/p/4201309.html