這個主題已經被討論過很多次了,不過,我還是想從它要解決的問題的角度來談談什麼是作用域(使用 JavaScript)。
隨著應用程式規模的增加,它們的複雜性也會增加 - 範圍是管理這種複雜性的工具。
假設我們有一個設定為 7 的全域變數 radius 和一個傳回「特殊」按鈕的函數 createSpecialButton():
此函數傳回一個具有特定半徑的按鈕,在本例中設定為 7。現在,程式碼沒有問題,因為我們知道半徑設定為多少,因此知道生成的按鈕會是什麼樣子。但是,如果我們添加兩個都依賴半徑變數的函數,會發生什麼情況呢?我們的程式碼現在看起來像這樣:
進行此變更後,呼叫 createSpecialButton() 時半徑的值會是多少?如果你猜對了 16,那就對了。
僅僅透過添加兩個附加函數,我們就大大增加了程式碼的複雜性,現在生活在一個多個不相關的程式碼片段依賴於相同依賴項的世界。現在,想像這是一個更大的全端應用程式 - 很快就會變得很難推斷某些狀態部分來自何處以及如何在出現錯誤時修復它們。
為了解決這個問題,我們可以為每個函數定義一個單獨的半徑變數:
您可能會看到此更改並說“好吧,好吧,但現在有更多代碼 - 這似乎不對”。沒錯,程式碼更多,但是程式碼越少也不是更好,如果它會導致程式碼的可維護性降低 - 我們所做的更改提高了程式碼的可維護性,這總是一件好事。
JavaScript 中的作用域類型將聲明置於全域範圍內
例如,使用 script 標籤,你可能會這樣做:
雷雷
認為上面的例子就是他們所指的。
使用 window 全域物件時,你可能會這樣做:
雷雷
例如,在user.ts中,兩個函數都可以存取變數名稱。
雷雷
雷雷
雷雷
功能範圍
雷雷
注意:您可能會看到這被稱為“本地範圍”。
區塊範圍
雷雷
注意:現代 JavaScript 使用 let 和 const 來宣告變數,而不是 var。
最後,請記住,作用域是管理程式碼複雜性的工具,放置聲明的作用域層級越高,程式碼的複雜度就越高,因此最好將聲明放在一起在必要的最小範圍內。
以上是理解 JavaScript 中的作用域的詳細內容。更多資訊請關注PHP中文網其他相關文章!