LET:javascript
基本用法:在javascript中聲明一個變量一般使用var ,在es6中新增了let指令,用法相似var ,可是let聲明的變量只能在所在的代碼塊有效。java
⚠️ 使用let聲明變量要注意一下幾個點:es6
1,let指令不存在變量提高,因此變量必定要先聲明後再使用,不然就會報錯。瀏覽器
console.info(info); //ReferenceError let info;
2, 存在暫時性死區,也就是說,只要一個塊級做用域中使用let聲明瞭某個變量,那麼這個變量就被綁定在這個區塊了。外界對它是影響不到的。ide
var info = 123; if(true){ info = "abc"; //ReferenceError let info; }
以上這段代碼中存在全局變量info 可是在區塊中又使用let聲明瞭一個info變量,因此這個變量info就被綁定在塊級做用域中,因此會報錯。(😖 疑問:爲何全局變量不用let來聲明?是由於let聲明語句是不能重複聲明一個變量??)函數
3, 不容許重複聲明,let指令不容許在相同的做用域內重複聲明一個變量es5
//報錯 function(){ let aa = 10; var aa = 3; } //報錯 function(){ let aa = 10; let aa = 3; } // 也不能在一個函數內部從新聲明參數 function(arg){ let arg = 10; }
CONST:spa
const 用來聲明常量。⚠️一旦聲明便不可改變其值。code
一,與let的共同點:對象
1,只能在聲明所在的塊級做用域沒有效
2,只能在聲明後使用
3,const指令聲明的常量也不可提高,一樣存在暫時性死區,只能在聲明後使用
4,不可重複聲明常量
tips1 : 若是想設置跨模塊常量可使用一下寫法:
// constants.js export const a = 1; export const b = 2; export const c = 3; // test1.js import * as constants from './constants'; console.info(constants.a); // 1 console.info(constants.b); // 2 console.info(constants.c); // 3 //test2.js import {a, b} from './constants'; console.info(a); // 1 console.info(b); // 2
全局對象的屬性
全局對象是最頂層的對象,在瀏覽器環境指的是window對象,在nide.js中指的是global對象,在es5中,全局對象的屬性與變量是等價的。 以下:全局對象屬性賦值和全局變量的賦值是一件事。
window.a = 1; // a=1 a = 2; //a = 2
如上規定,很容易不自覺的建立了全局變量,ess6爲了改變這一點,一方面規定,var命令和function命令聲明的全局變量依舊是全局對象的屬性,另外一方面規定,let、const、和class命令聲明的全局變量不屬於全局對象的屬性。
var a = 2; window.a; // 2 let b = 3; window.b; //undefined
二,在es5和es6中的聲明命令
es5:var function
es6 : var function let const class