輕鬆學習 JavaScript——第 1 部分:瞭解 let 語句
本文由碼農網 – 小峰原創翻譯,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃!
使用let語句,允許你在JavaScript中建立塊範圍區域性變數。let語句是在JavaScript的ECMAScript 6標準中引入的。
在你往下了解let語句之前,我建議你先檢視基於Infragistics jQuery庫的Ignite UI,它可以幫助你更快地編寫和執行Web應用程式。你可以使用JavaScript庫的Ignite UI來快速解決HTML5,jQuery,Angular,React或ASP.NET MVC中複雜的LOB需求。(你可以在這裡下載Ignite UI的免費試用版。)
在ECMAScript 6之前,JavaScript有三種型別的範圍:
- 全域性範圍
- 函式範圍
- 詞彙範圍
為了詳細探索let語句,請細想下面的程式碼段:
function foo() { var x = 9; if (x > 5) { var x = 7; console.log("Value of x in if statement = " + x); } console.log("Value of x outside if statement = " + x); } foo();
以上程式碼得到的輸出:
在上面的程式碼中,我們使用var語句宣告變數x。因此,變數x的範圍是函式範圍。if語句內的變數x 就是if語句外建立的變數x 。因此,在你修改if語句塊內變數x的值時,也會修改函式中變數x的所有引用的值。
為了避免這種情況,你需要使用塊級別範圍,let語句允許你建立塊範圍的區域性變數。
修改上面的程式碼片段,使用let語句宣告變數:
function foo() { var x = 9; if (x > 5) { let x = 7; console.log("Value of x in if statement = " + x); } console.log("Value of x outside if statement = " + x); } foo();
在上面的程式碼段中,我們使用let語句來宣告範圍級區域性變數x。因此,在if語句內更新變數x的值不會影響if語句外的變數x的值。
下面是上述程式碼的輸出:
與使用函式範圍(或全域性範圍)宣告的變數不同,使用let宣告的變數是塊範圍的:它們只存在於它們定義的塊中。
變數提升
使用let宣告的變數提升不同於使用var宣告的變數。因此,使用let宣告的變數沒有變數提升,這意味著使用let宣告的變數不會移動到執行上下文的頂部。
為了更好地理解這一點,請看以下這段程式碼:
function foo() { console.log(x); console.log(y); var x = 9; let y = 67; } foo();
作為輸出,你將獲得變數y的ReferenceError,變數y使用let語句宣告。使用let宣告的變數不會提升到執行上下文之上。
重新宣告變數
你不能在同一個函式或塊中使用let重新宣告一個變數。這樣做會出現語法錯誤。請看以下程式碼:
function foo() { if(true){ let x = 9; let x = 89; } } foo();
執行上面的程式碼會出來一個語法錯誤,如下所示:
暫時性死區
有時,使用let宣告的變數會導致暫時性死區。在以下程式碼中,let x=x+67 將丟擲x未定義的異常。
之所以會出現這個錯誤,是因為表示式(x + 67)求的是if塊範圍內區域性變數x的值,而不是函式範圍內區域性變數x的值。執行上面的程式碼,你會得到這樣一個異常:
你可以通過移動宣告變數到表示式的上面一行來修復上述錯誤,如下所示:
塊級範圍界定是任何程式語言最重要的功能之一,並且隨著ECMAScript 6中let語句的引入,JavaScript現在也有了這個功能。使用let語句,允許建立一個作用域在塊範圍內的變數。這可以解決許多問題,例如全域性範圍變數的意外修改,閉包中的區域性變數,以及幫助編寫更清晰的程式碼。
在“輕鬆學習JavaScript”系列的下一篇文章中,我們將介紹JavaScript函式中的rest引數。你可以在ECMA International網站上詳細瞭解有關這方面的內容。此外,不要忘記檢視Ignite UI,它可以與HTML5,Angular,React或ASP.NET MVC一起來幫助建立豐富的網際網路應用程式。
系列目錄
輕鬆學習 JavaScript——第 1 部分:瞭解 let 語句
輕鬆學習 JavaScript——第 2 部分:函式中的 Rest 引數
輕鬆學習 JavaScript——第 3 部分:函式中的預設引數
輕鬆學習 JavaScript——第 4 部分:函式中的 arguments 物件
輕鬆學習 JavaScript——第 5 部分:簡化函式提升
輕鬆學習 JavaScript——第 6 部分:JavaScript 箭頭函式
輕鬆學習 JavaScript——第 7 部分:物件屬性描述符
輕鬆學習 JavaScript——第 8 部分:JavaScript 中的類
譯文連結:http://www.codeceo.com/article/easy-javascript-01-let.html
英文原文:Easy JavaScript, Part 1: Learn the 'let' Statement
翻譯作者:碼農網 – 小峰
[ 轉載必須在正文中標註並保留原文連結、譯文連結和譯者等資訊。]
相關文章
- 輕鬆學習 JavaScript(1):瞭解 let 語句JavaScript
- 輕鬆學習 JavaScript——第 8 部分:JavaScript 中的類JavaScript
- 輕鬆學習 JavaScript——第 6 部分:JavaScript 箭頭函式JavaScript函式
- 輕鬆學習 JavaScript——第 5 部分:簡化函式提升JavaScript函式
- 輕鬆學習 JavaScript——第 7 部分:物件屬性描述符JavaScript物件
- 輕鬆學習 JavaScript——第 4 部分:函式中的 arguments 物件JavaScript函式物件
- 輕鬆學習 JavaScript——第 2 部分:函式中的 Rest 引數JavaScript函式REST
- 輕鬆學習 JavaScript——第 3 部分:函式中的預設引數JavaScript函式
- 怎麼輕鬆學習JavaScriptJavaScript
- 輕鬆學習 JavaScript(8):JavaScript 中的類JavaScript
- 輕鬆學習 JavaScript(6):JavaScript 箭頭函式JavaScript函式
- 初步瞭解 CoffeeScript,第 2 部分: 動手實踐學習
- 輕鬆學習 JavaScript(5):簡化函式提升JavaScript函式
- 輕鬆學習 JavaScript (4):函式中的 arguments 物件JavaScript函式物件
- 輕鬆學習 JavaScript(7):物件屬性描述符JavaScript物件
- 僅1個例子輕鬆學習正規表示式
- Laravel 中輕鬆容易的輸出 SQL 語句LaravelSQL
- 輕鬆學習 JavaScript (2):函式中的 Rest 引數JavaScript函式REST
- 輕鬆學習 JavaScript (3):函式中的預設引數JavaScript函式
- 腦圖學習 JavaScript 之犀牛書【五】語句JavaScript
- 輕鬆部署 Laravel 應用 | 《15. 瞭解 Envoy》Laravel
- 如何輕鬆學習 Kubernetes?
- XML輕鬆學習手冊(5)XML語法之二(轉)XML
- XML輕鬆學習手冊(5)XML語法之四(轉)XML
- SQL 語句學習SQL
- sql語句學習SQL
- 學會JavaScript函數語言程式設計(第3部分)JavaScript函數程式設計
- 學會JavaScript函數語言程式設計(第2部分)JavaScript函數程式設計
- 帶你輕鬆瞭解C# Lock 關鍵字C#
- 輕鬆理解 Transformers(2):Attention部分ORM
- XML輕鬆學習手冊(4)XML的術語之二(轉)XML
- Yii2 - Active Record 輕鬆學習
- 在 laravel 中輕鬆容易的輸出完整的 sql 語句LaravelSQL
- [譯] 使用深度學習自動生成 HTML 程式碼 - 第 1 部分深度學習HTML
- shell學習-常用語句
- 學習Scala IF…ELSE 語句
- PLSQL學習——控制語句SQL
- shell 學習之for語句