作用域
全局變量和局部變量
塊級作用域
詞法作用域
作用域鍊
代碼示例
總結
作用域:變量可以起作用的範圍
全局變量
在任何地方都可以通路到的變量就是全局變量,對應全局作用域
局部變量
隻在固定的代碼片段内可通路到的變量,最常見的例如函數内部。對應局部作用域(函數作用域)
<code>不使用var聲明的變量是全局變量,不推薦使用。 變量退出作用域之後會銷毀,全局變量關閉網頁或浏覽器才會銷毀</code>
任何一對花括号({和})中的語句集都屬于一個塊,在這之中定義的所有變量在代碼塊外都是不可見的,我們稱之為塊級作用域。
在es5之前沒有塊級作用域的的概念,隻有函數作用域,現階段可以認為JavaScript沒有塊級作用域
變量的作用域是在定義時決定而不是執行時決定,也就是說詞法作用域取決于源碼,通過靜态分析就能确定,是以詞法作用域也叫做靜态作用域。
在 js 中詞法作用域規則:
函數允許通路函數外的資料.
整個代碼結構中隻有函數可以限定作用域.
作用域規則首先使用提升規則分析
如果目前作用規則中有名字了, 就不考慮外面的名字
隻有函數可以制造作用域結構, 那麼隻要是代碼,就至少有一個作用域, 即全局作用域。凡是代碼中有函數,那麼這個函數就構成另一個作用域。如果函數中還有函數,那麼在這個作用域中就又可以誕生一個作用域。
将這樣的所有的作用域列出來,可以有一個結構: 函數内指向函數外的鍊式結構。就稱作作用域鍊。
