什么是作用域?
作用域是你的代碼在運(yùn)行時(shí),各個(gè)變量、函數(shù)和對(duì)象的可訪問性。換句話說,作用域決定了你的代碼里的變量和其他資源在各個(gè)區(qū)域中的可見性。
JavaScript中的作用域
在 JavaScript 中有兩種作用域:
全局作用域
局部作用域
當(dāng)變量定義在一個(gè)函數(shù)中時(shí),變量就在局部作用域中,而定義在函數(shù)之外的變量則從屬于全局作用域。每個(gè)函數(shù)在調(diào)用的時(shí)候會(huì)創(chuàng)建一個(gè)新的作用域。
全局作用域
當(dāng)你在文檔中(document)編寫 JavaScript 時(shí),你就已經(jīng)在全局作用域中了。JavaScript 文檔中(document)只有一個(gè)全局作用域。定義在函數(shù)之外的變量會(huì)被保存在全局作用域中。
全局作用域里的變量能夠在其他作用域中被訪問和修改。
局部作用域
定義在函數(shù)中的變量就在局部作用域中。并且函數(shù)在每次調(diào)用時(shí)都有一個(gè)不同的作用域。這意味著同名變量可以用在不同的函數(shù)中。因?yàn)檫@些變量綁定在不同的函數(shù)中,擁有不同作用域,彼此之間不能訪問。
塊語句
塊級(jí)聲明包括if和switch,以及for和while循環(huán),和函數(shù)不同,它們不會(huì)創(chuàng)建新的作用域。在塊級(jí)聲明中定義的變量從屬于該塊所在的作用域。
上下文
很多開發(fā)者經(jīng)常弄混作用域和上下文,似乎兩者是一個(gè)概念。但并非如此。作用域是我們上面講到的那些,而上下文通常涉及到你代碼某些特殊部分中的this值。作用域指的是變量的可見性,而上下文指的是在相同的作用域中的this的值。我們當(dāng)然也可以使用函數(shù)方法改變上下文,這個(gè)之后我們?cè)儆懻摗T谌肿饔糜蛑?,上下文總?Window 對(duì)象。
參考文獻(xiàn):理解 JavaScript 作用域