摘要:變量范圍有助于減少阻止這種情況發生。但是,在函數之外調用將導致由于局部變量只能在其函數中訪問,因此可以在不同的函數中使用相同的變量名稱詞法作用域學習詞法作用域也很重要。局部變量在函數啟動時創建,并在函數結束時刪除。
Scope決定了代碼中變量,函數和對象的可見性。在這里了解所有細節。
Scope是JavaScript和編程的一個重要方面。Scope限制了整個代碼中變量,函數和對象的可見性以及可用性。
這帶來了很多好處,其中包括:
安全 - 變量只能在需要的地方訪問。
減少變量名空間沖突 - 當兩個或更多變量共享一個通用名稱時,會發生變量名沖突。變量范圍有助于減少阻止這種情況發生。
*
在最基本的層面上,JavaScript有兩種類型的范圍:
Global Scope(全局作用域)
Local Scope(局部作用域)
全局作用域當你開始用JavaScript編寫代碼時,你就已經在全局范圍內。任何在全局范圍內編寫的東西都可以在JavaScript代碼中的任何地方訪問
var cat = "Jerry";
function localScopeExample(){ // LOCAL SCOPE console.log(cat); // Jerry }
// GLOBAL SCOPE console.log(cat); // Jerry局部作用域
局部作用域稍微復雜一點。局部作用域變量只能在局部作用域(它們被定義的地方)中可見和可訪問。您可以將局部作用域視為您在全局范圍內創建的任何新范圍。
一個簡單的例子就是在使用函數時。用JavaScript編寫的每個函數都會創建一個新的局部作用域。這些局部作用域的變量只能在它們定義的函數中訪問。
我們來看一個例子。我們將創建一個函數并在該函數中聲明變量cat。貓可以訪問并且可以在該功能的任何地方使用。但是,在函數之外調用cat將導致Uncaught ReferenceError:
function localScopeExample(){ // LOCAL SCOPE var cat = "Jerry"; console.log(cat); // Jerry }
// GLOBAL SCOPE console.log(cat); // Uncaught ReferenceError: cat is not defined
由于局部變量只能在其函數中訪問,因此可以在_不同的函數中使用相同的變量名稱_:
function func1(){ var cat = "Jerry"; console.log(cat); // Jerry }
function func2(){ var cat = "Tom"; console.log(cat); // Tom }詞法作用域
學習詞法作用域也很重要。詞法作用域(也稱為靜態作用域)是內部函數訪問外部函數范圍的能力。
我們來看一個例子。在下面的代碼中,我們定義了兩個函數 - func1在全局范圍內,func2在func1范圍內聲明。由于詞匯范圍的限制,您可以在_范圍2_中訪問_全局作用域_和_范圍1_中的所有內容:
// GLOBAL SCOPE var dog = "Lewis";
function func1(){ // SCOPE 1 var cat = "Jerry";
var func2 = function(){ // SCOPE 2 console.log(cat); // Jerry console.log(dog); // Lewis } }塊級作用域
使用var時,變量既可以是全局作用域,也可以局部作用于定義它的函數。塊級作用域如if,for,while,{}對var 沒有影響。
let & const,另一方面,它們被限定在它們所定義的區塊內。我們來看一個例子:
let x = 1;
{ let x = 2; console.log(x); // 2 }
console.log(x); // 1
正如你在上面看到的那樣,簡單地使用括號來創建一個代碼塊將在本地范圍內在該塊內聲明的任何變量。相同的概念適用于其他塊范圍:
let x = 1;
if (x !== 2) { let x = 2; console.log(x); // 2 }
console.log(x); // 1
但要小心。如果您不小心重新聲明具有相同塊范圍的相同變量,則會出現錯誤:
{ let x = 1; let x = 2; }
Uncaught SyntaxError: Identifier "x" has already been declared關鍵要點:
全局范圍的持續時間與系統一樣長。
局部變量在函數啟動時創建,并在函數結束時刪除。
詞法作用域允許內部函數訪問其外部函數的作用域
const和let是塊范圍變量。塊范圍不適用于var。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/94912.html
摘要:變量范圍有助于減少阻止這種情況發生。但是,在函數之外調用將導致由于局部變量只能在其函數中訪問,因此可以在不同的函數中使用相同的變量名稱詞法作用域學習詞法作用域也很重要。局部變量在函數啟動時創建,并在函數結束時刪除。 Scope決定了代碼中變量,函數和對象的可見性。在這里了解所有細節。 showImg(https://segmentfault.com/img/remote/1460000...
摘要:變量范圍有助于減少阻止這種情況發生。但是,在函數之外調用將導致由于局部變量只能在其函數中訪問,因此可以在不同的函數中使用相同的變量名稱詞法作用域學習詞法作用域也很重要。局部變量在函數啟動時創建,并在函數結束時刪除。 Scope決定了代碼中變量,函數和對象的可見性。在這里了解所有細節。 showImg(https://segmentfault.com/img/remote/1460000...
摘要:作用域作用域是指程序源代碼中定義變量的區域。采用詞法作用域,也就是靜態作用域。而與詞法作用域相對的是動態作用域,函數的作用域是在函數調用的時候才決定的。前面我們已經說了,采用的是靜態作用域,所以這個例子的結果是。 JavaScript深入系列的第二篇,JavaScript采用詞法作用域,什么語言采用了動態作用域?兩者的區別又是什么?還有一個略難的思考題,快來看看吧。 作用域 作用域是指...
摘要:閉包引起的內存泄漏總結從理論的角度將由于作用域鏈的特性中所有函數都是閉包但是從應用的角度來說只有當函數以返回值返回或者當函數以參數形式使用或者當函數中自由變量在函數外被引用時才能成為明確意義上的閉包。 文章同步到github js的閉包概念幾乎是任何面試官都會問的問題,最近把閉包這塊的概念梳理了一下,記錄成以下文章。 什么是閉包 我先列出一些官方及經典書籍等書中給出的概念,這些概念雖然...
摘要:在中的應用采用詞法作用域,也就是靜態作用域。那什么又是詞法作用域或者靜態作用域呢請繼續往下看靜態作用域與動態作用域因為采用的是詞法作用域函數的作用域在函數定義的時候就決定了。 開篇 當我們在開始學習任何一門語言的時候,都會接觸到變量的概念,變量的出現其實是為了解決一個問題,為的是存儲某些值,進而,存儲某些值的目的是為了在之后對這個值進行訪問或者修改,正是這種存儲和訪問變量的能力將狀態給...
閱讀 1091·2021-11-15 18:00
閱讀 2803·2021-09-22 15:18
閱讀 1965·2021-09-04 16:45
閱讀 750·2019-08-30 15:55
閱讀 3853·2019-08-30 13:10
閱讀 1332·2019-08-30 11:06
閱讀 1984·2019-08-29 12:51
閱讀 2294·2019-08-26 13:55