C 語言中變數的作用範圍

了解作用範圍在 C 語言中的定義與運作方式。 在 C 語言程式中,當你宣告一個變數時,其作用範圍會根據你宣告的位置而有所不同。 這表示該變數在某些地方可用,但在其他地方則無法存取。 根據位置,變數可分為兩種類型: 全域變數 區域變數 以下是宣告於函式內部的區域變數範例: int main(void) { int age = 37; } 區域變數只能在函式內部存取,當函式結束時,它們將停止存在。它們會被從記憶體中釋放(但有些例外情況)。 而若在函式外部宣告的變數則為全域變數,像是以下範例: int age = 37; int main(void) { /* ... */ } 全域變數可在程式的任何函式中存取,並且在程式執行期間一直可用,直到結束。 我提到區域變數在函式結束後將不再可用。 這是因為預設情況下,區域變數是在堆疊(stack)上宣告的,除非你使用指標將其顯式配置於堆積中,但這樣你就得自行管理記憶體。

JavaScript 變數

變數是指向識別符的字面值,因此您可以在程序中引用並使用它。了解如何使用 JavaScript 声明一个变量。 JavaScript 變數介紹 使用 var 使用 let 使用 const JavaScript 變數介紹 變數是指向識別符的字面值,因此您可以在程序中引用並使用它。 JavaScript 中的變數沒有任何附加的類型。一旦您將特定的字面值類型分配給變量,您可以稍後將變量重新分配給任何其他類型,而不會出現類型錯誤或任何問題。 這就是為什麼有時會將 JavaScript 稱為“未命名”的原因。 在使用變量之前,必須先聲明變量。有三種方式可以實現這一點,使用 var,let 或 const,而這三種方式在稍後與變量互動方面有所不同。 使用 var 在 ES2015 之前,var 是定義變量的唯一構造。 var a = 0 如果忘記添加 var,就會將值分配給未聲明的變量,結果可能會有所不同。 在開啟嚴格模式的現代環境中,您將收到一個錯誤。在較舊的環境中(或在未開啟嚴格模式的情況下),這將初始化該變量並將其分配給全局對象。 如果在聲明變量時未初始化該變量,則該變量將具有 undefined 的值,直到您將值分配給它。 var a //typeof a === 'undefined' 您可以多次重新聲明變量以覆蓋它: var a = 1 var a = 2 您也可以在同一語句中同時聲明多個變量: var a = 1, b = 2 作用域是變量可見的代碼部分。 使用 var 在任何函數外部初始化的變量將被分配給全局對象,具有全局作用域並且在任何地方都可見。使用 var 在函數內部初始化的變量將分配給該函數,具有局部作用域並且僅在其中可見,就像函數參數一樣。 在具有相同名稱的全局變量的函數中定義的任何變量將優先於全局變量,遮蔽它。 重要的是要理解,塊(由一對花括號識別)不定義新的作用域。只有在創建函數時才會創建新的作用域,因為 var 沒有塊作用域,而是函數作用域。...

JavaScript範圍

學習JavaScript範圍的基礎知識 範圍是一組定義在編程語言中以確定變量值的規則。 JavaScript使用詞法範圍,這意味著變量的值由其在被寫入時的位置所定義,而不是在其被調用時,這是與另一種替代方式動態範圍不同的事情。 範圍是對程序的部分可見的變量集合。 我們有全局範圍,區塊範圍和函數範圍。如果一個變量在函數或區塊外部定義,它將附加到全局對象並具有全局範圍,這意味著它在程序的每個部分都可用。 var,let和const聲明之間有一個非常重要的區別。 在函數內部定義為var的變量只在該函數內部可見,就像函數參數一樣。 另一方面,在其所在的塊內定義為const或let的變量只在該塊內部可見。 重要的是要理解,塊(由一對花括號標識)不為var定義新的範圍,但對於let和const則有。只有在創建函數時,才為var創建新的範圍,因為var沒有塊範圍,而是函數範圍。 在函數內部,任何在其中定義的var變量在所有函數代碼中都可見,即使該變量在函數結束時聲明,它仍然可以在開頭引用,因為JavaScript在執行代碼之前實際上會將所有變量聲明移動到頂部(這被稱為提升)。為避免混淆,始終在函數開頭聲明var變量。 這就是我的意思。即使你在函數結尾聲明了一個var變量,它的聲明也會被移到頂部: function run() { console.log(`${name}`) var name = 'Flavio' } run() 這將打印出“undefined”,因為實際上發生的是: function run() { var name; console.log(`${name}`) name = 'Flavio' } run() let和const不會“受到”提升的影響。如果在上面的示例中使用它們之一,則會出現錯誤:ReferenceError: name is not defined。 在JavaScript中,父函數的變量也可以在內部函數中使用。內部函數的範圍還包括父函數的範圍,這稱為閉包(我們將在後面更詳細地談論這一點)。 你需要注意一點。在非嚴格模式下,如果你使用未聲明的變量,無論你在哪裡使用,該變量都會附加到全局範圍。這可能是錯誤的根源。所以,在使用變量之前,請確保始終聲明變量。只是要意識到這一點,但這只是預設情況下使用嚴格模式的另一個原因,嚴格模式可以解決這個問題。我們之後再談論嚴格模式。 記住:在具有與全局變量同名的函數(或塊)中定義的任何變量優先於全局變量,遮蔽它。 這將打印undefined: var name = 'Roger' function run() { console.log(`${name}`) var name = 'Flavio' } run() 而這將引發錯誤ReferenceError: name is not defined: let name = 'Roger' function run() { console.log(`${name}`) let name = 'Flavio' } run()