您好,登錄后才能下訂單哦!
前言
首先,一個常見的問題是,ECMAScript 和 JavaScript 到底是什么關系?
ECMAScript是一個國際通過的標準化腳本語言。JavaScript由ECMAScript和DOM、BOM三者組成。可以簡單理解為:ECMAScript是JavaScript的語言規范,JavaScript是ECMAScript的實現和擴展。
2011 年,ECMAScript 5.1 版發布。之前我們大部分人用的也就是ES5
2015 年 6 月,ECMAScript 6 正式通過,成為國際標準。
好了,回歸我們的正題。
本文說的這個話題對于一些老鳥來說可能根本算不上疑問,但對于新手來說也許除了最常見的var之外,let和const較少使用的機會。
所以在本文中,我將會通過一些例子來為大家介紹如何在Javascript中靈活使用var、let和const這些關鍵字來定義變量,以及這些關鍵字它們之間有什么異同。
如果你懶得看下面的代碼,那我可以先把概念結論說出:
下面我將通過示例的形式來詳細為大家介紹它們三者之間的異同:
Var
var用以聲明一個變量,并且同時我們可以在聲明語句中初始化所聲明的變量。
例如:
var a = 10;
考慮以下代碼片段:
function nodeSimplified() { var a =10; console.log(a); // 輸出 10 if(true) { var a=20; console.log(a); // 輸出 20 } console.log(a); // 輸出 20 }
在上面的代碼中,你可以發現,當變量a在if代碼段里被更新時,它的值被全局更新了,因此在經過了if代碼后,被更新的值仍然被保留著。這與其他語言中的全局變量有點類似。但是,在使用這個功能時要非常小心,因為它有可能會覆蓋一個已有的值。
let
let語句在一個塊級范圍里聲明一個局部變量。和var類似,我們可以在聲明時初始化它的值。
例如:
let a = 10;
考慮下面的代碼片段:
function nodeSimplified() { let a =10; console.log(a); // output 10 if(true) { let a=20; console.log(a); // output 20 } console.log(a); // output 10 }
它和大多數語言中我們所見的表現行為是一致的。
function nodeSimplified() { let a =10; let a =20; // 拋出語法錯誤 console.log(a); }
錯誤信息:"未捕獲的異常:標識符'a'已經被聲明過。" 但如果使用var就沒事:
function nodeSimplified() { var a =10; var a =20; console.log(a); // 輸出 20 }
使用let語句,可以很好的維護變量的作用范圍。當使用內部函數時,let語句讓你的代碼更整潔。
我希望上面的例子能幫你更好地理解var和 let。如果有任何疑問,請在評論區留言。
const
const語言中的變量只能被賦值一次,然后就不能在被賦值。const語句的作用范圍和let語句一樣。
例如:
const a = 10; function nodeSimplified() { const MY_VARIABLE =10; console.log(MY_VARIABLE); // 輸出 10 }
照例,命名規范指出我們應該用大寫字母聲明常量。當然,const a = 10 在上面的代碼中會的起到相同的作用。為了讓代碼長期可維護,命名規范還是值得遵守的。
問題:如果給一個const變量重新賦值會發生什么? 考慮下面的代碼:
function nodeSimplified() { const MY_VARIABLE =10; console.log(MY_VARIABLE); // 輸出 10 MY_VARIABLE =20; // 拋出類型錯誤 console.log(MY_VARIABLE); }
錯誤信息:"未捕獲的類型錯誤:給const變量賦值"。
當我們嘗試給已有的const變量賦值時,這段代碼會拋出一個錯誤。
介紹就到此結束,希望這篇短小精悍的文章能夠幫助到各位更好的理解在Javascript中聲明變量時使用不同關鍵字上到底有何異同。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。