關於JavaScript的作用域你應該瞭解的那點事!
作用域是JavaScript中非常基礎的概念,很多剛入門的同學卻弄不懂作用域的概念,但不弄明白的話又不能夠寫出高效簡介的程式碼,今天小千就來給大家介紹一下關於前端JavaScript作用域的那點事。
什麼是作用域
JavaScript 中的作用域是指變數的可訪問性或可見性,也就是說,程式的哪些部分可以訪問該變數,或者該變數在何處可見。
為什麼作用域很重要
作用域的主要好處是安全性。也就是說,只能從程式的特定區域訪問變數,使用作用域,我們可以避免程式其他部分對變數的意外修改。
作用域可減少命名衝突。也就是說,我們可以在不同的作用域內使用相同的變數名。
作用域型別
JavaScript中有三種型別的作用域:全域性作用域、區域性作用域或函式作用域、塊級作用域。
1. 全域性作用域
不在函式或塊(一對花括號)內定義的任何變數都在全域性作用域內,可以從程式的任何位置訪問全域性作用域內的變數。例如:
2. 區域性作用域或函式作用域
利用 var 在函式體內部宣告的變數都在區域性作用域(或稱函式作用域)內,它們只能從該函式內部訪問,不能在外部程式碼中訪問。例如:
3. 塊級作用域
ECMAScript 2015 引入了 let 和 const 來定義變數,與 var 定義變數不同,它們的作用域是在最接近的花括號內,這意味著,不能從那對花括號之外訪問它們。例如:
我們可以看到 var 定義的變數可以在塊外部使用,而 let 定義的變數不能在塊外部訪問。
4.巢狀作用域
就像 JavaScript 中的函式一樣,一個作用域可以巢狀在另一個作用域內。例如:
這個程式碼片段中有 3 個作用域彼此巢狀。首先,塊級作用域(由 let 定義的變數建立)巢狀在區域性作用域或函式作用域內,而後者又巢狀在全域性作用域內。
5.詞法作用域
詞法作用域(也稱為靜態作用域),從字面上講是指作用域是在詞法分析(通常稱為編譯)時確定的,而不是在執行時確定的。以題主的問題作為示例:
在這裡,不管是從哪兒呼叫 test() 函式,console.log(a) 總是會列印 hello world,這與具有 動態作用域 的語言 console.log(a) 不同,後者會根據呼叫函式的位置而列印不同的值。
如果上面的程式碼是用支援動態作用域的語言編寫的,console.log(a) 則會列印出來 I belong to func。
使用詞法作用域,我們可以僅透過檢視原始碼來確定變數的作用域,而在動態作用域下,只有在執行程式碼後才能確定作用域。
6.作用域鏈
當在 JavaScript 中使用變數時,JavaScript 引擎將嘗試在當前作用域中查詢變數的值,如果找不到變數,它將查詢外部作用域並將繼續這樣做,直到找到變數或到達全域性作用域為止。如果在全域性作用域中仍然找不到該變數,它將在全域性作用域內隱式宣告該變數(非嚴格模式下)或返回錯誤。
呼叫 bar() 函式時,JavaScript 引擎將查詢 bar 變數並在當前作用域中找到了它。接下來,在當前作用域中查詢 foo 變數,但無法找到它,因此繼續在外部作用域中查詢並找到了它(即全域性作用域)。
之後,我們為 num 變數賦值 99,JavaScript 引擎在當前作用域中查詢 num 變數,找不到,然後在外部作用域(全域性作用域)中查詢變數,也找不到,由於指令碼不在嚴格模式下,因此建立一個名為 num 的新全域性變數,併為其分配變數值 99。
以上就是關於JavaScript作用域的介紹和案例了,希望能幫到大家。本文來自千鋒教育,轉載請註明出處。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31548651/viewspace-2778631/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 作用域那點事
- 前端筆記之JavaScript(四)關於函式、作用域、閉包那點事前端筆記JavaScript函式
- 關於大資料你應該瞭解的五件事兒大資料
- 關於工業物聯網,你應該瞭解的3件事
- 你應該知道的關於SEO和Javascript的6個事實JavaScript
- 關於 Flex 的那點事兒Flex
- [譯]關於NODE_ENV,哪些你應該瞭解
- 跨域的那點事跨域
- 函式節流你應該知道的那點事,建議收藏!函式
- 【譯】關於JavaScript 陣列你應該知道的事情JavaScript陣列
- 【譯】你應該瞭解的 CORSCORS
- 關於 Grid 佈局的那點事兒
- 關於聚合根,領域事件的那點事---深入淺出理解DDD事件
- js關於物件那點事JS物件
- 【譯】關於 JavaScript 的原型你應該知道的所有事情JavaScript原型
- 關於Git小白應該知道的事Git
- 關於製造業中物聯網的未來應該瞭解的7件事
- 關於實時推送系統的那點事
- 【幣乎】關於 KEY 那點事
- 關於 jwt ,你應該知道的JWT
- 關於 JavaScript 中的特殊函式,你應該這樣看JavaScript函式
- 關於http斷點續傳那點事HTTP斷點
- JavaScript作用域相關的總結JavaScript
- 你應該瞭解的 Java SPI 機制Java
- 你應該瞭解的MySQL鎖分類MySql
- 關於阿里雲多活容災的那點事阿里
- 關於校園招聘你必須瞭解的五件事
- 前端筆記之JavaScript(五)關於陣列和字串那點事前端筆記JavaScript陣列字串
- 關於 jwt 你應該知道的事情JWT
- 關於CORS 應該注意的幾點CORS
- 理解JavaScript的核心知識點:作用域JavaScript
- 相親交友原始碼開發,關於分散式快取應該瞭解的一些事原始碼分散式快取
- 圖解javascript作用域圖解JavaScript
- 微信圈圈 - 關於微信那點事
- 關於WSL2你應該知道的
- 關於消防應急電源,你瞭解多少?
- 關於存款保險,您應該瞭解這些IWQ
- 快速瞭解VUE中的編譯作用域Vue編譯