相關閱讀:http://es6.ruanyifeng.com/#docs/let
相關閱讀:https://www.cnblogs.com/ksl666/p/5944718.html
相關閱讀:https://www.cnblogs.com/ziyunfei/p/6038213.html
ES5 只有兩種聲明變量的方法:var
命令和function
命令。
ES6 除了添加let
和const
命令,還有兩種聲明變量的方法:import
命令和class
命令。
所以,ES6 一共有 6 種聲明變量的方法。
(1) var命令。
var a ; //undefined var b = 1;
- var定義的變量可以修改,如果不初始化會輸出undefined,不會報錯
- var 聲明的變量在window上,用let或者const去聲明變量,這個變量不會被放到window上
- 很多語言中都有塊級作用域,但JS沒有,它使用var聲明變量,以function來划分作用域,大括號“{}” 卻限定不了var的作用域,因此用var聲明的變量具有變量提升的效果
- var 聲明的變量作用域是全局的或者是函數級的
(2)function命令
function add(a) { var sum = a + 1; return sum; }
- 聲明了一個名為 add的新變量,並為其分配了一個函數定義
- {}之間的內容被分配給了 add
- 函數內部的代碼不會被執行,只是存儲在變量中以備將來使用
(3) cosnt命令
const a; //報錯,必須初始化 const b = 1;
- const定義的變量不可以修改,而且必須初始化
- 該變量是個全局變量,或者是模塊內的全局變量
- 如果一個變量只有在聲明時才被賦值一次,永遠不會在其它的代碼行里被重新賦值,那么應該使用const,但是該變量的初始值有可能在未來會被調整(常變量)
- 創建一個只讀常量,在不同瀏覽器上表現為不可修改;建議申明后不修改;擁有塊級作用域
- const 代表一個值的常量索引 ,也就是說,變量名字在內存中的指針不能夠改變,但是指向這個變量的值可能 改變
- const定義的變量不可修改,一般在require一個模塊的時候用或者定義一些全局常量
-
可以在全局作用域或者函數內聲明常量,但是 必須初始化常量
-
常量不能和它所在作用域內其它變量或者函數擁有相同名稱
(4) let命令
let a; //undefined let b = 1; function add(b) { let sum = b + 1; return sum; } let c = add(b);
- 需要”javascript 嚴格模式”:'use strict';
- 不存在變量提升
- 不允許重復聲明
- let聲明的變量作用域是在塊級域中,函數內部使用let定義后,對函數外部無影響(塊級作用域)
- 可以在聲明變量時為變量賦值,默認值為undefined,也可以稍后在腳本中給變量賦值,在生命前無法使用(暫時死區)
(5) import命令
(6) class命令