let 和 const命令
創(chuàng)新互聯(lián)公司堅(jiān)信:善待客戶,將會(huì)成為終身客戶。我們能堅(jiān)持多年,是因?yàn)槲覀円恢笨芍档眯刨?。我們從不忽悠初訪客戶,我們用心做好本職工作,不忘初心,方得始終。十年網(wǎng)站建設(shè)經(jīng)驗(yàn)創(chuàng)新互聯(lián)公司是成都老牌網(wǎng)站營(yíng)銷服務(wù)商,為您提供網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、網(wǎng)站設(shè)計(jì)、H5場(chǎng)景定制、網(wǎng)站制作、成都品牌網(wǎng)站建設(shè)、小程序設(shè)計(jì)服務(wù),給眾多知名企業(yè)提供過(guò)好品質(zhì)的建站服務(wù)。1 let命令
用法:
ES6新增let命令,用于聲明變量,用法類似var,只是let聲明的變量是塊級(jí)作用域內(nèi)有效
例:
{
let a = 10;
var b = 1;
}
a // a is not defined
b // 1
根據(jù)返回值可以看出,let聲明變量時(shí)的作用域只在其代碼塊內(nèi)
for 循環(huán)的計(jì)數(shù)器就很適合使用let來(lái)聲明變量。
var a = [];
for (var i = 0; i<10; i++){
a[i] = function(){
console.log(i);
};
}
a[6]();//10
如果用let聲明變量i;
a[6]();//6
因?yàn)閘et聲明的i只在本輪循環(huán)內(nèi)有效。所以每次循環(huán)的i其實(shí)都是新的變量,于是輸出6。
let聲明變量不存在變量提升;
例:
console.log(foo);
let foo = 2;
執(zhí)行會(huì)報(bào)錯(cuò),但是如果用var聲明,得到的結(jié)果就是2。
暫時(shí)性死區(qū):
只要塊級(jí)作用域內(nèi)存在let命令,它所聲明的變量就“綁定這個(gè)區(qū)域”,不受外部影響。
例
var tmp =123 ;
if(true){
tmp = 'abc';
let tmp;
}
報(bào)錯(cuò),let綁定了if內(nèi)的塊級(jí)作用域,在let聲明變量前,對(duì)tmp賦值會(huì)報(bào)錯(cuò)。
ES6明確規(guī)定,如果區(qū)塊 存在let和const命令,則這個(gè)區(qū)塊對(duì)這些命令聲明的變量從一開始就形成封閉作用域。
在代碼塊內(nèi),使用let命令聲明變量之前,該變量都是不可用的。語(yǔ)法上稱“暫時(shí)性死區(qū)”,簡(jiǎn)稱TDZ。
let不允許在相同作用域內(nèi)重復(fù)聲明同一個(gè)變量。(這個(gè)就不解釋了)
2.塊級(jí)作用域到底是個(gè)啥
ES5只有函數(shù)作用域和全局作用域,沒有塊級(jí)作用域,那么會(huì)帶來(lái)以下不合理情況:
例1
var tmp = new Date();
funciton f(){
console.log(tmp);
if(false){
var tmp = "hello world";
}
}
f() //undefined;
變量提升內(nèi)層tmp變量覆蓋了外層的tmp變量
例2
for 循環(huán)計(jì)數(shù)的變量泄露為全局變量。
ES6的塊級(jí)作用域
function f1(){
let n = 5;
if(true){
let n = 10;
}
console.log(n);//5
}
最后輸出5,表明外層代碼不受內(nèi)層代碼塊的影響。如果使用var, 最后的輸出值為10.
ES6允許塊級(jí)作用域任意嵌套;
另外ES6規(guī)定,函數(shù)本身作用域在其所在的塊級(jí)作用域內(nèi)。
fuction f(){ console.log(1)};
(function (){
function f(){
console.log(2);
}
f();
}());
ES5//2,
ES6//1。
嚴(yán)格模式下,函數(shù)只能在頂層作用域和函數(shù)內(nèi)聲明,其他情況(if,for)下的聲明都會(huì)報(bào)錯(cuò)。
3.const命令
const 用來(lái)聲明常量。 一旦聲明,其值不可改變。
const 作用域等同于let,只在聲明所在的塊級(jí)作用域內(nèi)有效。
const 命令只是保證變量名指向的地址不變,并不保證該地址的數(shù)據(jù)不變,所以將一個(gè)對(duì)象聲明為常量必須非常小心。
例
const a=[];
a.push("hello");//可執(zhí)行
a.length = 0; //可執(zhí)行
a = ['Dave'];// 報(bào)錯(cuò)。
數(shù)組本身是可寫的,但是要把另一個(gè)數(shù)組賦值給a,就會(huì)報(bào)錯(cuò)。
如果想讓對(duì)面被凍結(jié),本身也不可寫,應(yīng)該使用Object.freeze方法。
ES6一共6中聲明變量的方法:
var function let const import class
4.跨模塊常量
// constants.js 模塊
export const A= 1;
export const B= 3;
export const C= 4;
// test1.js 模塊
import * as constants from './constants';
console.log(constanst.A);//1
console.log(constanst.B);//3
//test2.js模塊
import {A,B} from './constants';
console.log(A);//1
console.log(B);//3
5.全局對(duì)象的屬性
ES5:
window.a = 1;
a //1;
a = 2;
window.a //2
ES6:
let b = 1;
window.b // undefined;
ES6規(guī)定 var 命令和function 命令聲明的全局變量依舊是全局對(duì)象的屬性
let命令 、 const命令、 class命令聲明的全局變量不屬于全局對(duì)象的屬性
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
當(dāng)前文章:ES6學(xué)習(xí)筆記第二章-創(chuàng)新互聯(lián)
文章URL:http://muchs.cn/article30/djggpo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、商城網(wǎng)站、響應(yīng)式網(wǎng)站、網(wǎng)站內(nèi)鏈、微信公眾號(hào)、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容