什么是作用域?
作用域是你的代碼在運行時穿肄,各個變量际看、函數和對象的可訪問性。換句話說仲闽,作用域決定了你的代碼里的變量和其他資源在各個區(qū)域中的可見性赖欣。
JavaScript中的作用域
在 JavaScript 中有兩種作用域:
全局作用域
局部作用域
當變量定義在一個函數中時,變量就在局部作用域中社牲,而定義在函數之外的變量則從屬于全局作用域。每個函數在調用的時候會創(chuàng)建一個新的作用域搏恤。
全局作用域
當你在文檔中(document)編寫 JavaScript 時,你就已經在全局作用域中了藤巢。JavaScript 文檔中(document)只有一個全局作用域痛阻。定義在函數之外的變量會被保存在全局作用域中腮敌。
全局作用域里的變量能夠在其他作用域中被訪問和修改。
局部作用域
定義在函數中的變量就在局部作用域中糜工。并且函數在每次調用時都有一個不同的作用域。這意味著同名變量可以用在不同的函數中油坝。因為這些變量綁定在不同的函數中刨裆,擁有不同作用域,彼此之間不能訪問瞬女。
塊語句
塊級聲明包括if和switch,以及for和while循環(huán)诽偷,和函數不同疯坤,它們不會創(chuàng)建新的作用域。在塊級聲明中定義的變量從屬于該塊所在的作用域眠冈。
上下文
很多開發(fā)者經常弄混作用域和上下文菌瘫,似乎兩者是一個概念。但并非如此突梦。作用域是我們上面講到的那些,而上下文通常涉及到你代碼某些特殊部分中的this值刊懈。作用域指的是變量的可見性,而上下文指的是在相同的作用域中的this的值虚汛。我們當然也可以使用函數方法改變上下文,這個之后我們再討論蛋辈。在全局作用域中将谊,上下文總是 Window 對象。
參考文獻:理解 JavaScript 作用域