摘要:對于,雖然之前也有過學(xué)習(xí),但總的來說還是不夠系統(tǒng)的,知識點非常的零碎。因此包括以為基礎(chǔ)產(chǎn)生的語法糖在逐漸的趨近于強(qiáng)類型的語言。是創(chuàng)建,而不是的覆蓋。因而稱之為富一代。所以語法標(biāo)準(zhǔn)的更新將對良好編程習(xí)慣有著極大的利好。
對于ES6,雖然之前也有過學(xué)習(xí),但總的來說還是不夠系統(tǒng)的,知識點非常的零碎?,F(xiàn)在結(jié)合之前遇到的問題把ES6中的知識點總結(jié)一下。
最初接觸ES6時,明白ES5中聲明變量的方式是使用var,在ES6中他是使用let的方式進(jìn)行聲明的。
JavaScript是一個弱類型的語言。他無法在編譯時就提示一些語法錯誤,只能在運行時期才能夠發(fā)現(xiàn)錯誤。因此ES6包括以ES6為基礎(chǔ)產(chǎn)生的TypeScript語法糖在逐漸的趨近于強(qiáng)類型的語言。
進(jìn)入正題,結(jié)合問題看一下var和let的區(qū)別
1:我們來看第一段代碼(從前兩篇博客中摘過來的):
123
var divArr = document.getElementsByTagName("div"); for (var i = 0;i < divArr.length;i++){ divArr[i].onclick = function(){ console.log(i); } }
運行結(jié)果為:
分析:
首先聲明一下:
ES5中只有全局作用域和函數(shù)作用域沒有塊級作用域
因此在這段使用var聲明的i變量,i在全局范圍內(nèi)都有效,因此在全局范圍內(nèi)只有一個變量i。因此很清晰的就是只要循環(huán)一次,變量i的值都是需要發(fā)生變化的。他是覆蓋而不是創(chuàng)建,因此我把它稱之為富二代,啃老族
在代碼1中增加一段代碼:
var divArr = document.getElementsByTagName("div"); for (var i = 0;i < divArr.length;i++){ divArr[i].onclick = function(){ console.log(i); } } console.log(i); //輸出3
上述代碼就可以證明了 在使用var聲明了變量i之后,他的作用域是全局的。而不是在塊級作用域中,所以他才可以在最后一行輸出i的值。這樣也驗證了使用var聲明的變量是不具備塊級作用域的。
2:來看第二段代碼:
123
var divArr = document.getElementsByTagName("div"); for (let i = 0;i < divArr.length;i++){ divArr[i].onclick = function(){ console.log(i); } };
運行結(jié)果為:
從前面的博客中使用的是閉包進(jìn)行處理代碼1中的問題,現(xiàn)在使用的是ES6中的let進(jìn)行處理。當(dāng)使用let進(jìn)行聲明變量時,當(dāng)前變量i只在本輪循環(huán)中有效,因此每一個循環(huán)中的i其實都是一個新的變量i,初始化本輪的變量i的值其實是上一輪循環(huán)的值(js引擎內(nèi)部原理)。因此在編譯后的執(zhí)行階段,每一個i都是不一樣的變量。let是創(chuàng)建,而不是var的覆蓋。因而稱之為富一代。
既然上邊談到作用域的問題,就不得不說了ES6中的作用域的問題:
ES6中新增了塊級作用域,在作用域中聲明的變量只在當(dāng)前作用域中有效
var divArr = document.getElementsByTagName("div"); for (let i = 0;i < divArr.length;i++){ divArr[i].onclick = function(){ console.log(i); } }; console.log(i);
最后一行的輸出結(jié)果和前面的很不一樣
很顯然,在for循環(huán)外部,是獲取不到變量i的,而這種變化正是ES6中的let賦予的。
1:由于變量作用域的問題會導(dǎo)致兩者聲明的變量的適用范圍有著極大的不同;
2:使用var聲明的變量是一個覆蓋,頂替的過程,而使用let聲明變量是一個創(chuàng)建,并在原有基礎(chǔ)上開拓的過程。
3:所以js語法標(biāo)準(zhǔn)的更新將對良好編程習(xí)慣有著極大的利好。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/101537.html
摘要:對比常量聲明與聲明常量聲明與聲明,都是塊級聲明。最后一點全局塊級綁定與不同于的另一個方面是在全局作用域上的表現(xiàn)。塊級綁定新的最佳實踐在的發(fā)展階段,被廣泛認(rèn)可的變量聲明方式是默認(rèn)情況下應(yīng)當(dāng)使用而不是??偨Y(jié)與塊級綁定將詞法作用域引入。 var變量與變量提升 使用var關(guān)鍵字聲明的變量,無論其實際聲明位置在何處,都會被視為聲明于所在函數(shù)的頂部(如果聲明不在任意函數(shù)內(nèi),則被視為在全局作用域的頂...
摘要:一共講解了個常用的新特性,講解過程也是由淺入深。最后一個新增的方法主要是為了彌補(bǔ)當(dāng)做構(gòu)造函數(shù)使用時產(chǎn)生的怪異結(jié)果。特性共享父級對象共享父級不能當(dāng)做構(gòu)造函數(shù)語法最簡表達(dá)式前后對比很容易理解,可以明顯看出箭頭函數(shù)極大地減少了代碼量。 showImg(https://segmentfault.com/img/bVQ5GW?w=1024&h=675); 上周在公司組織了 ES6 新特性的分享會...
摘要:可以通過調(diào)用方法將創(chuàng)建一個新的類型的值,這個值獨一無二,不與任何值相等。還可以使可擴(kuò)展,在中,表達(dá)式被標(biāo)準(zhǔn)化為構(gòu)造函數(shù)的一個方法,這意味著它是可擴(kuò)展的。 前端發(fā)展的太快了,快到ES6,ES7出來之后,今年已經(jīng)是ES8了,但是縱然前端發(fā)展很快,我們除了馬不停蹄的學(xué)習(xí)新的技術(shù)之外,也要沉下心來,好好的潛心磨礪自己,本文是整理了自己學(xué)習(xí)ES6之后相關(guān)的知識要點,寄希望于書之于筆,一來自己可以...
摘要:沒有箭頭函數(shù)沒有自己的對象,這不一定是件壞事,因為箭頭函數(shù)可以訪問外圍函數(shù)的對象那如果我們就是要訪問箭頭函數(shù)的參數(shù)呢你可以通過命名參數(shù)或者參數(shù)的形式訪問參數(shù)不能通過關(guān)鍵字調(diào)用函數(shù)有兩個內(nèi)部方法和。 1、基本語法回顧 我們先來回顧下箭頭函數(shù)的基本語法。ES6 增加了箭頭函數(shù): var f = v => v; // 等同于 var f = function (v) { return ...
摘要:第二章學(xué)習(xí)函數(shù)的參數(shù)和擴(kuò)展點為鍵上面那個參數(shù)箭頭函數(shù)數(shù)組合并解構(gòu)使用解決回調(diào)地獄問題,使結(jié)構(gòu)更加清晰。概念是在推廣過程中對模塊定義的規(guī)范化產(chǎn)出。通過引入依賴規(guī)范服務(wù)端使用的規(guī)范。帶名字的輸出默認(rèn)輸出概念上面有講注意事項,需掌握的東西 (第二章)學(xué)習(xí)ES6 函數(shù)的Rest參數(shù)和擴(kuò)展 //ES5 function sum(x,y,z){ let total = 0; if(...
閱讀 2995·2021-09-26 10:18
閱讀 5312·2021-09-22 15:02
閱讀 2812·2019-08-30 15:53
閱讀 1862·2019-08-29 18:41
閱讀 2710·2019-08-27 10:58
閱讀 2643·2019-08-26 13:49
閱讀 2767·2019-08-26 12:17
閱讀 915·2019-08-26 11:49