第一章? let與const
1.ECMAScript 6.0的簡稱 ES6
2.ECMAScript 和 JavaScript 的關(guān)系是,前者是后者的規(guī)格,后者是前者的一種實(shí)現(xiàn)
3.ES6 既是一個(gè)歷史名詞,也是一個(gè)泛指,含義是 5.1 版以后的 JavaScript 的下一代標(biāo)準(zhǔn),涵蓋了? ? ? ? ? ES2015、ES2016、ES2017 等等
4.let和var相似,但let只在代碼塊中有效
5.let不存在變量提升:var命令會(huì)發(fā)生“變量提升”現(xiàn)象,即變量可以在聲明之前使用。
為了糾正這種現(xiàn)象,let命令改變了語法行為,它所聲明的變量一定要在聲明后使用,否則報(bào)錯(cuò)
6.let暫時(shí)性死區(qū):只要塊級作用域內(nèi)存在let命令,它所聲明的變量就“綁定”(binding)這個(gè)區(qū)域,不再受外部的影響。只能在聲明的位置后使用。
7.在沒有l(wèi)et之前,typeof運(yùn)算符是百分之百安全的,永遠(yuǎn)不會(huì)報(bào)錯(cuò)?,F(xiàn)在這一點(diǎn)不成立了。這樣的設(shè)計(jì)是為了讓大家養(yǎng)成良好的編程習(xí)慣,變量一定要在聲明之后使用,否則就報(bào)錯(cuò)
8.let不允許重復(fù)聲明:let不允許在相同作用域內(nèi),重復(fù)聲明同一個(gè)變量,否則會(huì)報(bào)錯(cuò)。
9.塊級作用域解決問題:①內(nèi)層變量覆蓋外層變量 ②用來計(jì)數(shù)的循環(huán)變量泄露為全局變量
10.塊級作用域的特點(diǎn):①可以任意嵌套 ②內(nèi)層作用域變量可以與外層作用域變量同名,互不影響③ES6 的塊級作用域必須有大括號,如果沒有大括號,JavaScript 引擎就認(rèn)為不存在塊級作用域
11.const是一個(gè)只讀常量,一點(diǎn)定義,常量的值就不能改變。特點(diǎn):①一旦聲明馬上賦值②const的作用域與let命令相同:只在聲明所在的塊級作用域內(nèi)有效③暫時(shí)性死區(qū):只能在聲明的位置后使用。④不允許重復(fù)聲明
12.ES6聲明變量的方式有6種:原有兩個(gè)var,function,新增四個(gè)let,const,import,class(后邊兩個(gè)以后會(huì)總結(jié))
13.var,function命令聲明的全局變量依然是頂層對象(可使用window.name訪問),新增的let,const,class聲明的全局變量,不屬于頂層對象的屬性。也就是說,從 ES6 開始,全局變量將逐步與頂層對象的屬性脫鉤。
14.JavaScript 語言存在一個(gè)頂層對象,它提供全局環(huán)境(即全局作用域),所有代碼都是在這個(gè)環(huán)境中運(yùn)行。但是,頂層對象在各種實(shí)現(xiàn)里面是不統(tǒng)一的。
瀏覽器里面,頂層對象是window,但 Node 和 Web Worker 沒有window。
瀏覽器和 Web Worker 里面,self也指向頂層對象,但是 Node 沒有self。
Node 里面,頂層對象是global,但其他環(huán)境都不支持。