ES6學(xué)習(xí)筆記之let與const用法實(shí)例分析
本文實(shí)例講述了ES6學(xué)習(xí)筆記之let與const用法。分享給大家供大家參考,具體如下:
在ES6中不是var,而是通過(guò)let來(lái)聲明變量,用const來(lái)聲明常量,有如下一些不同:
1、let與const作用域只限于當(dāng)前代碼塊{},而var則沒(méi)有這種限制。
2、使用let、const申明的變量作用域不會(huì)被提升。例如:
console.log(str); var str="var declare";
控制臺(tái)輸出undefined;因?yàn)樽兞可昝魇窃谌我獯a執(zhí)行前處理的,在代碼區(qū)中任意地方聲明變量和在最開(kāi)始(最上面)的地方聲明是一樣的。也就是說(shuō),看起來(lái)一個(gè)變量可以在聲明之前被使用!這種行為就是所謂的“hoisting”,也就是變量提升,看起來(lái)就像變量的聲明被自動(dòng)移動(dòng)到了函數(shù)或全局代碼的最頂上。注意:僅僅是聲明提升了,定義并不會(huì)被提升。因此console.log()可以檢測(cè)到str的聲明,但是卻沒(méi)有定義,提示undefined。
console.log(str2); let str2="let declare";
控制臺(tái)報(bào)錯(cuò):can't access lexical declaration `str2' before initialization,let不會(huì)把聲明提升到全局之前,因此在console輸出str2時(shí)會(huì)報(bào)錯(cuò)未聲明。
3、在相同的作用域下不能申明相同的變量,利用var可以聲明兩次同一個(gè)變量,并且后一個(gè)會(huì)覆蓋前面的聲明,而let、const不可以。
4、for循環(huán)體現(xiàn)let的父子作用域
var btns=document.querySelectorAll('button'); for (var i=0;i<btns.length;i++){ btns[i].οnclick=function () { alert("第"+i+"個(gè)按鈕"); } }
由于var會(huì)提升作用域,當(dāng)btns[i]在本代碼塊{}找不到i時(shí),會(huì)找到之前的for中的i。在函數(shù)循環(huán)執(zhí)行時(shí),并沒(méi)有觸發(fā)onclick,i一直++到5。當(dāng)任意按鈕點(diǎn)擊的時(shí)侯觸發(fā)onclick,此時(shí)i==5,因此無(wú)論按那個(gè)按鈕都會(huì)顯示“第5個(gè)按鈕”。
解決方法一:閉包處理
var btns=document.querySelectorAll('button'); for (var i=0;i<btns.length;i++){ (function (i) {//通過(guò)參數(shù)傳遞i,在另一個(gè)函數(shù)內(nèi)的i btns[i++].οnclick=function () { alert("第"+i+"個(gè)按鈕"); } })(i); }
閉包處理:閉包就是一個(gè)函數(shù)引用另外一個(gè)函數(shù)的變量,因?yàn)樽兞勘灰弥圆粫?huì)被回收,因此可以用來(lái)封裝一個(gè)私有變量,i是另一個(gè)函數(shù)作用域內(nèi)的變量,不會(huì)隨著外循環(huán)而改變。
方法二:使用let的情況下,會(huì)自己區(qū)分為兩個(gè)作用域,每個(gè)btns[i]內(nèi)的函數(shù)對(duì)應(yīng)不同的變量i
for (let i=0;i<btns.length;i++){//內(nèi)部為新的let作用域 btns[i].οnclick=function (){ alert("第"+i+"個(gè)按鈕"); } }
感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運(yùn)行工具:http://tools.jb51.net/code/HtmlJsRun測(cè)試上述代碼運(yùn)行效果。
更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
相關(guān)文章
javascript實(shí)現(xiàn)文本框標(biāo)簽驗(yàn)證的實(shí)例代碼
這篇文章主要介紹了javascript實(shí)現(xiàn)文本框標(biāo)簽驗(yàn)證的實(shí)例代碼,需要的朋友可以參考下2018-10-10使用JavaScript實(shí)現(xiàn)彈出層效果的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇使用JavaScript實(shí)現(xiàn)彈出層效果的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-05-05微信小程序開(kāi)發(fā)實(shí)戰(zhàn)快速入門教程
這篇文章主要為大家介紹了開(kāi)發(fā)一個(gè)微信小程序?qū)崙?zhàn)快速入門教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04有關(guān)JavaScript的10個(gè)怪癖和秘密分享
在本片文章中,作者將向您講述JavaScript中最鮮為人知的秘密。學(xué)習(xí)js的朋友可以參考下。2011-08-08jser必看的破解javascript各種加密的反向思維方法
才發(fā)現(xiàn)的破解javascript各種加密的反向思維方法,大家有好的方法都跟帖啊最近發(fā)現(xiàn)了一個(gè)代碼,加密了5層左右,我將破解到最后一步,而且不用javascript解密程序2007-04-04js內(nèi)置對(duì)象處理_打印學(xué)生成績(jī)單的簡(jiǎn)單實(shí)現(xiàn)
下面小編就為大家?guī)?lái)一篇js內(nèi)置對(duì)象處理_打印學(xué)生成績(jī)單的簡(jiǎn)單實(shí)現(xiàn)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-09-09javascript實(shí)現(xiàn)在指定元素中垂直水平居中
當(dāng)談到網(wǎng)頁(yè)的布局中,居中問(wèn)題一直得不到很有效的解決,居中通常是相對(duì)于某一個(gè)元素的,比如我們經(jīng)常所說(shuō)的屏幕居中的問(wèn)題,我們了解父元素的信息越多,我們就越能更加容易的實(shí)現(xiàn)居中布局。下面我們通過(guò)具體的實(shí)例來(lái)看看javascript如何來(lái)實(shí)現(xiàn)垂直水平居中2015-09-09javascript實(shí)現(xiàn)輸出指定行數(shù)正方形圖案的方法
這篇文章主要介紹了javascript實(shí)現(xiàn)輸出指定行數(shù)正方形圖案的方法,可實(shí)現(xiàn)javascript獲取用戶輸入及根據(jù)輸入?yún)?shù)打印圖形的功能,需要的朋友可以參考下2015-08-08