天天看點

JavaScript作用域

作用域

全局變量和局部變量

塊級作用域

詞法作用域

作用域鍊

代碼示例

總結

作用域:變量可以起作用的範圍

全局變量

在任何地方都可以通路到的變量就是全局變量,對應全局作用域

局部變量

隻在固定的代碼片段内可通路到的變量,最常見的例如函數内部。對應局部作用域(函數作用域)

<code>不使用var聲明的變量是全局變量,不推薦使用。 變量退出作用域之後會銷毀,全局變量關閉網頁或浏覽器才會銷毀</code>

任何一對花括号({和})中的語句集都屬于一個塊,在這之中定義的所有變量在代碼塊外都是不可見的,我們稱之為塊級作用域。

在es5之前沒有塊級作用域的的概念,隻有函數作用域,現階段可以認為JavaScript沒有塊級作用域

變量的作用域是在定義時決定而不是執行時決定,也就是說詞法作用域取決于源碼,通過靜态分析就能确定,是以詞法作用域也叫做靜态作用域。

在 js 中詞法作用域規則:

函數允許通路函數外的資料.

整個代碼結構中隻有函數可以限定作用域.

作用域規則首先使用提升規則分析

如果目前作用規則中有名字了, 就不考慮外面的名字

隻有函數可以制造作用域結構, 那麼隻要是代碼,就至少有一個作用域, 即全局作用域。凡是代碼中有函數,那麼這個函數就構成另一個作用域。如果函數中還有函數,那麼在這個作用域中就又可以誕生一個作用域。

将這樣的所有的作用域列出來,可以有一個結構: 函數内指向函數外的鍊式結構。就稱作作用域鍊。

JavaScript作用域
JavaScript作用域
JavaScript作用域

繼續閱讀