這篇文章將為大家詳細(xì)講解有關(guān)web中l(wèi)et和const的示例分析,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
創(chuàng)新互聯(lián)建站公司2013年成立,先為平壩等服務(wù)建站,平壩等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為平壩企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
塊級(jí)作用域
在ES6之前我們腦海里應(yīng)該只存在全局作用域和函數(shù)級(jí)作用域,沒有塊級(jí)作用域。那么為什么要引入塊級(jí)作用域呢?
避免外層變量被覆蓋
var str = "hello"; function d() { console.log(str); if (false) { var str = 'world'; } } d();//undefined
相信很多剛?cè)腴T的同學(xué)看到上述代碼會(huì)有所不解,其實(shí)在全局作用域str變量已經(jīng)被聲明且復(fù)制,為什么我函數(shù)里面訪問不到呢。這里就牽扯到變量提升和函數(shù)級(jí)作用域的概念。上述代碼其實(shí)等同于下放代碼,當(dāng)函數(shù)被執(zhí)行的時(shí)候生成了一個(gè)新的作用域也就是函數(shù)作用域,js引擎會(huì)把變量聲明提到方法體的最前面,大家可以看到只是聲明了并沒有賦值。所以就是 undefined。
var str = "hello"; function d() { var str ; console.log(str); if (false) { str = 'world'; } } d();//undefined
循環(huán)變量污染全局變量
var str = 'hello'; for (var i = 0; i < str.length; i++) { console.log(str[i]); } console.log(i); // 5
很多同學(xué)面試的時(shí)候可能會(huì)遇到上面類似的代碼,疑惑點(diǎn)應(yīng)該在為什么會(huì)打印出來為什么會(huì)是5,同樣的道理代碼如同下方。變量會(huì)被提升,所以在循環(huán)結(jié)束之后i就被累加到了5.
var str = 'hello'; var i; for ( i = 0; i < str.length; i++) { console.log(str[i]); } console.log(i); // 5
es6的let和const聲明符,是不存在變量提升的;同時(shí)也只在塊級(jí)作用域生效。
這個(gè)答案應(yīng)該很明顯了吧
var str = "hello"; function d() { console.log(str); if (false) { let str = 'world'; } } d();
暫時(shí)性死區(qū)MDN
什么是暫時(shí)性死區(qū)呢?很多人可能很迷惑。那就聽我娓娓道來,如果說我們使用了let和const命令,作用域內(nèi)會(huì)對(duì)這些命令聲明的變量,在它的聲明周期內(nèi)形成一種封閉作用域。這在語法上,稱為“暫時(shí)性死區(qū)”。代碼展示如下:
if (true) { tmp = 'abc'; // ReferenceError console.log(tmp); // ReferenceError let tmp; console.log(tmp); // undefined tmp = 123; console.log(tmp); // 123 }
因?yàn)閘et和const聲明是不會(huì)被提升的,所以為了保障聲明的有效性,js的解釋引擎會(huì)對(duì)變量所處的塊級(jí)作用域形成一種保護(hù),因此在聲明之前使用會(huì)有語法錯(cuò)誤,是不被允許的。
不能重復(fù)聲明
function de(){ var a = "1"; var a = "2"; console.log(a); } de()//不報(bào)錯(cuò) function de(){ var a = "1"; let a = "2"; console.log(a); } de()//報(bào)錯(cuò) function de(){ let a = "1"; let a = "2"; console.log(a); } de()//報(bào)錯(cuò)
相信大家一般不會(huì)聲明重復(fù)變量編碼,所以在這里就不做解釋了。如果大家感興趣可以自己研究或者來現(xiàn)場一起學(xué)習(xí)。
const常量
const聲明符的大多特性和let相同,這里就不多做解釋了。大家都知道const是聲明常量的,一但變量被聲明成常量它就不能再被繼續(xù)修改了。大家要注意的是這里變量不可被修改的是存儲(chǔ)的地址值不可被修改,意思就是簡單類型的數(shù)據(jù)是不能修改的。復(fù)合類型的數(shù)據(jù)(主要是對(duì)象和數(shù)組)const只能保證這個(gè)指針是固定的,而這個(gè)具體的對(duì)象實(shí)例包含的屬性是可以被修改的??纯创a我們可能會(huì)更清楚:
//實(shí)例一 const a = "hello"; console.log(a);//"hello" a = "world";//Assignment to constant variable //實(shí)例二 const obj = {}; obj.name = "jack"; console.log(obj.name);//"jack" obj = {};//Assignment to constant variable. //實(shí)例三 const a = []; a.push('Hello'); console.log(a); //[ 'Hello' ] a.length = 0; a = ['Dave']; // Assignment to constant variable.
正如大家所看到的字符串a(chǎn)被復(fù)制后就不能在修改,而對(duì)象和數(shù)組是可以改變它里面的元素的,但是不能給重新復(fù)制一個(gè)新的對(duì)象實(shí)例。由此就可以斷定const聲明出來的變量存的是固定的地址值。
關(guān)于“web中l(wèi)et和const的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。
新聞標(biāo)題:web中l(wèi)et和const的示例分析
轉(zhuǎn)載源于:http://sd-ha.com/article44/gcjjhe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、網(wǎng)站導(dǎo)航、響應(yīng)式網(wǎng)站、建站公司、網(wǎng)站改版、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)