摘要:塊級(jí)作用域只有全局作用域和函數(shù)作用域,沒(méi)有塊級(jí)作用域,這帶來(lái)了很多不合理的場(chǎng)景。如聲明變量的方法只有兩種聲明變量的方法命令一共有六種命令變量的解構(gòu)賦值允許按照一定的模式,從數(shù)組和對(duì)象中提取,按照位置的對(duì)應(yīng)關(guān)系對(duì)變量賦值,這被稱為解構(gòu)。
塊級(jí)作用域
es5只有全局作用域和函數(shù)作用域,沒(méi)有塊級(jí)作用域,這帶來(lái)了很多不合理的場(chǎng)景。
第一種場(chǎng)景:內(nèi)層變量可能會(huì)覆蓋外層變量
var test = "outside"; function f () { console.log(test); if (false) { var test = "inside"; } } f(); // undefined
出現(xiàn)這種結(jié)果的原因是變量提升,導(dǎo)致內(nèi)層的test覆蓋了外層的test
第二種場(chǎng)景:用來(lái)計(jì)數(shù)的循環(huán)變量泄露為全局變量
var str = "hello"; for(var i = 0; i < str.length; i++){ console.log(s[i]); } console.log(i); // 5let命令
let聲明的變量只在其代碼塊內(nèi)有效,var沒(méi)有塊作用域
不存在變量提升
暫時(shí)性死區(qū)(TDZ):es6明確規(guī)定,如果區(qū)域塊中存在let和const命令,則這個(gè)區(qū)塊對(duì)這些命令聲明的變量從一開(kāi)始就形成封閉性作用域。只要在聲明之前調(diào)用這些變量就會(huì)報(bào)錯(cuò)。
{ //TDZ開(kāi)始 test = "test"; //ReferenceError console.log(test); //ReferenceError let test; //TDZ結(jié)束 console.log(test); //undefined //比較隱蔽的TDZ function testFn (x=y, y=2) { return[x,y]; } testFn(); //報(bào)錯(cuò) }
不允許重復(fù)聲明:不允許在同一個(gè)作用域內(nèi)重復(fù)聲明同一個(gè)變量
//報(bào)錯(cuò) { let test = 1; var test = 2; } //報(bào)錯(cuò) { let test = 1; let test = 2; }const
const用來(lái)聲明常量
一旦聲明,其值就不能改變
必須立即初始化,即立即賦值
不存在常量提升,同let一樣存在暫時(shí)性死區(qū)
同let一樣不可重復(fù)聲明
作用域:只在當(dāng)前代碼塊有效
const命令只能保證常量名指向數(shù)據(jù)的地址不變,但是不能保證該地址的數(shù)據(jù)不變,如
const obj = {}; obj.prop = "test"; console.log(obj.prop); //"test" obj = {}; //typeError: "obj" is read-only跨模塊常量
可使用export使常量跨模塊
//constant.js export const A = 1; export const A = 2; export const A = 3; //test1模塊 import * as constants from "./constans"; console.log(constants.A); // 1 console.log(constants.B); // 2 //test1模塊 import {A, B} from "./constans"; console.log(constants.A); // 1 console.log(constants.B); // 2全局對(duì)象的屬性
在es5中,全局對(duì)象(window/global)的屬性與全局變量是等價(jià),在es6中規(guī)定,let、const、class命令生聲明的全局變量不屬于全局對(duì)象的屬性。如
var a = 1; b = 2; console.log(window.a); // 1 console.log(window.b); // 2 let c = 3; console.log(window.c); // undefinedes6聲明變量的方法
es5只有兩種聲明變量的方法:var、function命令
es6一共有六種:var、function、let、const、import、class命令
變量的解構(gòu)賦值es6允許按照一定的模式,從數(shù)組和對(duì)象中提取,按照位置的對(duì)應(yīng)關(guān)系對(duì)變量賦值,這被稱為解構(gòu)。本質(zhì)上,這種寫法屬于模式匹配。
數(shù)組的解構(gòu)賦值
//- 解構(gòu)成功:等號(hào)兩邊模式相同 var [a, b, c] = [1, 2, 3]; console.log(a, b, c); // 1 2 3 let [l, [[m], n]] = [1, [[2], 3]]; console.log(l, m, n); // 1 2 3 let [x, , y] = [1, 2, 3]; console.log(x, y); // 1 3 let [o, ...p] = [1, 2, 3, 4]; console.log(o); // 1 console.log(p); // [2, 3, 4] //- 不完全解構(gòu): 等號(hào)左邊的模式只匹配等號(hào)右邊數(shù)組的一部分 let [x, y] = [1, 2, 3]; console.log(x); //1 console.log(y); //2 let [x, [y], z] = [1, [2, 3], 4]; console.log(x); //1 console.log(y); //2 console.log(z); //4 //-解構(gòu)不成功。如果解構(gòu)不成功,變量的值就等于undefined let [a, b, c] = [1]; console.log(a); //1 console.log(y); //undefined console.log(z); //undefined
注意,如果等號(hào)的右邊不是數(shù)組,嚴(yán)格來(lái)說(shuō)不是遍歷結(jié)構(gòu),那么將會(huì)報(bào)錯(cuò)
//-報(bào)錯(cuò) let [a] = 1; let [b] = false; let [c] = NaN; let [d] =undefined; let [e] = null; let [f] = {}; 前5種轉(zhuǎn)為對(duì)象后不具備iterator接口,最后一個(gè)本身就不具備iterator接口
事實(shí)上,只要某種數(shù)據(jù)接口具備iterator接口,都可以使用數(shù)組形式的解構(gòu)賦值
默認(rèn)值
明天再寫
對(duì)象的解構(gòu)賦值
字符串的解構(gòu)賦值
數(shù)值和布爾值的解構(gòu)賦值
函數(shù)參數(shù)的結(jié)構(gòu)賦值
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/82884.html
摘要:學(xué)習(xí)筆記頂層對(duì)象雖然是筆記但是基本是抄了一次大師的文章了頂層對(duì)象頂層對(duì)象,在瀏覽器環(huán)境指的是對(duì)象,在指的是對(duì)象。之中,頂層對(duì)象的屬性與全局變量是等價(jià)的。的寫法模塊的寫法上面代碼將頂層對(duì)象放入變量。參考引用頂層對(duì)象實(shí)戰(zhàn) es6學(xué)習(xí)筆記-頂層對(duì)象_v1.0 (雖然是筆記,但是基本是抄了一次ruan大師的文章了) 頂層對(duì)象 頂層對(duì)象,在瀏覽器環(huán)境指的是window對(duì)象,在Node指的是gl...
摘要:本筆記為閱讀阮老師的文章自己的總結(jié),僅作自用,感謝阮老師的技術(shù)分享。字符串的遍歷器接口新增判斷字符串的包含情況返回值,表示是否找到了字符串。返回值表示參數(shù)字符串是否在原字符串的頭部。 本筆記為閱讀http://es6.ruanyifeng.com/ 阮老師的文章自己的總結(jié),僅作自用,感謝阮老師的技術(shù)分享。 1.超過(guò)uFFFF的字符ES5無(wú)法正確顯示,會(huì)顯示成前面的uFFFF的碼點(diǎn)符號(hào)加...
摘要:最近買了深入理解的書(shū)籍來(lái)看,為什么學(xué)習(xí)這么久還要買這本書(shū)呢主要是看到核心團(tuán)隊(duì)成員及的創(chuàng)造者為本書(shū)做了序,作為一個(gè)粉絲,還是挺看好這本書(shū)能給我?guī)?lái)一個(gè)新的升華,而且本書(shū)的作者也非常厲害。 使用ES6開(kāi)發(fā)已經(jīng)有1年多了,以前看的是阮一峰老師的ES6教程,也看過(guò)MDN文檔的ES6語(yǔ)法介紹。 最近買了《深入理解ES6》的書(shū)籍來(lái)看,為什么學(xué)習(xí)ES6這么久還要買這本書(shū)呢?主要是看到Daniel A...
摘要:新搭建的個(gè)人博客,本文地址學(xué)習(xí)筆記用重寫在一開(kāi)始的時(shí)候配置中我們就加入了的支持,就是下面的配置,但之前的學(xué)習(xí)筆記都使用的完成,所以專門作一篇筆記,記錄使用完成創(chuàng)建相關(guān)文件修改,增加該入口文件修改,引入該文件做個(gè)簡(jiǎn)單的測(cè)試,看下瀏覽器全部用來(lái) 新搭建的個(gè)人博客,本文地址:React學(xué)習(xí)筆記3:用es2015(ES6)重寫CommentBox在一開(kāi)始的時(shí)候webpack配置中我們就加入了e...
摘要:彩票項(xiàng)目實(shí)戰(zhàn)學(xué)習(xí)記錄一完整走了一遍課程,覺(jué)得還不錯(cuò)。支持正版人人有責(zé)零基礎(chǔ)教學(xué)解析彩票項(xiàng)目下面是項(xiàng)目課程的目錄路線一個(gè)項(xiàng)目分為三部分業(yè)務(wù)邏輯,自動(dòng)構(gòu)建系統(tǒng),模擬數(shù)據(jù)和真實(shí)數(shù)據(jù)接口處理。 彩票項(xiàng)目實(shí)戰(zhàn)學(xué)習(xí)記錄(一) 完整走了一遍課程,覺(jué)得還不錯(cuò)。 總結(jié): es6的知識(shí)點(diǎn)說(shuō)得還算清楚,主要是為了了解和使用,不是深究,所以淺嘗即止即可,所以覺(jué)得還不錯(cuò)。 完整還原了項(xiàng)目開(kāi)發(fā)的代碼設(shè)計(jì)和開(kāi)發(fā)過(guò)...
閱讀 2141·2021-11-15 17:57
閱讀 837·2021-11-11 16:54
閱讀 2681·2021-09-27 13:58
閱讀 4517·2021-09-06 15:00
閱讀 1039·2021-09-04 16:45
閱讀 3574·2019-08-30 15:56
閱讀 1835·2019-08-30 15:53
閱讀 1763·2019-08-30 14:12