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-difference-let-var

#JavaScript 中使用 let 和 var 有什麼區別? 何時應該使用 let 而不是 var?為什麼?讓我們一起找出答案! 在現代 JavaScript 中,我們有三種方式來聲明變量並賦值: const let var 在使用 JavaScript 中的變量時,我總是默認使用 const。它確保變量的值無法重新賦值,因此更安全使用。 但在需要稍後重新聲明變量時,我總是使用 let。 多年來我一直沒有使用 var,對我來說它只是為了保持向後兼容性而存在,當我看到有人使用它時,我總是會感到疑惑。 為什麼呢? 首先,let 具有合理的作用域。 在幾乎所有流行的編程語言中都使用的塊作用域,它指定使用 let 聲明的變量作用域為最接近的塊。 相反,var 更奇怪,因為它具有函數作用域,這意味著使用 var 聲明的變量作用域限制在最接近的函數內。 這對實際應用有影響。例如,在 if 語句內聲明一個變量或將變量用作 for 循環的迭代器。使用 let 使該變量僅在這兩個塊內有效。然而,使用 var 則允許該變量在該塊之外也可用,這可能導致錯誤。 總是使用功能最少的工具,以確保對其擁有最大的控制。 追求極大的力量就需要承擔極大的責任。 喜歡使用 let 的另一個原因是變量提升。與 const 一樣,let 變量不具有變量提升,但在評估時會進行初始化。 相反,var 變量會被提升到函數的頂部,因此即使在其聲明之前的行中也可以使用它們。這很奇怪,對吧? 第三個原因:當您聲明一個已經存在的 let 變量時,您會收到一個錯誤(在 嚴格模式 下)。 最後,另一個重要的區別是:如果您在任何函數之外聲明一個 var 變量,它將被分配給全局對象(在瀏覽器內部為 window)。let 不會以此方式工作;該變量是可用的,但不附加到全局對象,因此無法從文件外部訪問。

JavaScript中的提升機制是什麼?

對於JavaScript編程語言中的提升機制做一個簡要解釋。 在執行JavaScript代碼之前,它會解析代碼並將所有的函數和變量聲明添加到它自己的內存中,並將它們保存在內存中。這就是所謂的提升機制。 對於函數聲明和函數表達式,我們有不同的行為。 對於函數聲明,我們可以在函數定義之前調用函數,並且我們的代碼將正常運行。但對於其他情況,我們將會得到錯誤。 一個通用的法則是在使用之前,總是先定義函數、變量、對象和類,以避免出現意外情況。 假設我們有一個函數: function bark() { alert('wof!') } 由於提升機制,我們可以在它被聲明之前調用bark(): bark() function bark() { alert('wof!') } 這種情況只適用於函數聲明,就像上面的例子一樣。 而對於函數表達式則不同。 這是一個函數表達式: bark() var bark = function() { alert('wof!') } 在這種情況下,var聲明會被提升並初始化為undefined,類似於下面的代碼: var bark = undefined bark() bark = function() { alert('wof!') } 運行此代碼將引發TypeError: bark is not a function錯誤。 const和let聲明也會被提升,但它們不像var一樣被初始化為undefined。 const bark = function() { alert('wof!') } 或者 let bark = function bark() { alert('wof!') } 在這種情況下,如果在聲明之前調用bark(),將引發ReferenceError: Cannot access 'bark' before initialization錯誤。...