摘要:塊級(jí)作用域中的塊級(jí)作用域很有可能導(dǎo)致局部變量覆蓋全局變量或者局部變量泄露成全局變量。也就是局部變量與全局變量不會(huì)打架塊級(jí)作用域的出現(xiàn),實(shí)際上使得獲得廣泛應(yīng)用的立即執(zhí)行匿名函數(shù)不再必要了。
let 和 const命令 1.let 命令
基本用法
語(yǔ)法類(lèi)似 var,但是所聲明的變量,只在 let 命令所在的代碼塊內(nèi)有效。
在 for 循環(huán)中,就非常適合使用 let 聲明變量。
var a = []; for (let i = 0; i < 10; i++) { a[i] = function () { console.log(i); }; } a[6](); // 6
一般使用 var 來(lái)聲明變量 i 的話(huà),輸出的應(yīng)該是10,但是因?yàn)槭怯?let 聲明的。所以只有在本輪才有效。
先聲明,后使用 (暫時(shí)性死區(qū))
let 不像 var那樣會(huì)發(fā)生“變量提升”現(xiàn)象。所以,變量一定要在聲明后使用,否則報(bào)錯(cuò)。
ES6明確規(guī)定,如果區(qū)塊中存在 let 和 const 命令,這個(gè)區(qū)塊對(duì)這些命令聲明的變量,從一開(kāi)始就形成了封閉作用域。凡是在聲明之前就使用這些變量,就會(huì)報(bào)錯(cuò)。
let不允許在相同作用域內(nèi),重復(fù)聲明同一個(gè)變量。
目的
ES6規(guī)定暫時(shí)性死區(qū)和不存在變量提升,主要是為了減少運(yùn)行時(shí)錯(cuò)誤,防止在變量聲明前就使用這個(gè)變量,從而導(dǎo)致意料之外的行為。這樣的錯(cuò)誤在ES5是很常見(jiàn)的,現(xiàn)在有了這種規(guī)定,避免此類(lèi)錯(cuò)誤就很容易了。
2.塊級(jí)作用域ES5中的塊級(jí)作用域很有可能導(dǎo)致局部變量覆蓋全局變量或者局部變量泄露成全局變量。
所以使用 let 聲明變量,可以有效的防止上面的兩種情況的產(chǎn)生。從而產(chǎn)生了幾個(gè)ES6特有的特點(diǎn):
ES6允許塊級(jí)作用域的任意嵌套。
內(nèi)層作用域可以定義外層作用域的同名變量。(也就是局部變量與全局變量不會(huì)打架)
(*)塊級(jí)作用域的出現(xiàn),實(shí)際上使得獲得廣泛應(yīng)用的立即執(zhí)行匿名函數(shù)(IIFE)不再必要了。
(*)函數(shù)本身的作用域,在其所在的塊級(jí)作用域之內(nèi)。
{ let a = "secret"; function f() { return a; } } f() // 報(bào)錯(cuò)
上述代碼中,因?yàn)閒()是在塊級(jí)作用域中,所以不能再外部調(diào)用。改進(jìn)方法如下:
let f; { let a = "secret"; f = function () { return a; } } f() // "secret"
總之要保證f()的作用域范圍。
ES5的嚴(yán)格模式規(guī)定,函數(shù)只能在頂層作用域和函數(shù)內(nèi)聲明,其他情況(比如if代碼塊、循環(huán)代碼塊)的聲明都會(huì)報(bào)錯(cuò)。(但是構(gòu)成區(qū)塊的大括號(hào)不能少)
3.const 命令const 命令也用來(lái)聲明變量,但是聲明的是常量。一旦聲明,常量的值就不能改變。(咦我在學(xué)C++嗎...)
const 的使用條件與 let相似,也要滿(mǎn)足上面的條件。
4.跨模塊常量// constants.js 模塊 export const A = 1; export const B = 3; export const C = 4; // test1.js 模塊 import * as constants from "./constants"; console.log(constants.A); // 1 console.log(constants.B); // 3 // test2.js 模塊 import {A, B} from "./constants"; console.log(A); // 1 console.log(B); // 3
(咦,我在學(xué)python嗎...)
5.全局對(duì)象的屬性全局對(duì)象是最頂層的對(duì)象,在瀏覽器環(huán)境指的是window對(duì)象,在Node.js指的是global對(duì)象。ES5之中,全局對(duì)象的屬性與全局變量是等價(jià)的。
這樣早成的麻煩就是很容易在不知不覺(jué)中就創(chuàng)建了全局變量。
所以。ES6規(guī)定:
①var命令和function命令聲明的全局變量,依舊是全局對(duì)象的屬性
②let命令、const命令、class命令聲明的全局變量,不屬于全局對(duì)象的屬性。
看完第一章趕腳ES6把javascript變得更像一些其他的編程語(yǔ)言如JAVA,C++。著重強(qiáng)調(diào)了 塊級(jí)作用域。
明天繼續(xù)...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/78839.html
摘要:本文時(shí)間與日期處理實(shí)戰(zhàn)你肯定被坑過(guò)從屬于筆者的前端入門(mén)與最佳實(shí)踐中入門(mén)與最佳實(shí)踐系列文章。然而由于地球的不規(guī)則自轉(zhuǎn),導(dǎo)致時(shí)間有誤差,因此目前已不被當(dāng)作標(biāo)準(zhǔn)時(shí)間使用。而在航空上,所有使用的時(shí)間劃一規(guī)定是協(xié)調(diào)世界時(shí)。 本部分的知識(shí)圖譜請(qǐng)參考編程語(yǔ)言知識(shí)圖譜-時(shí)間與日期。showImg(https://segmentfault.com/img/remote/1460000007581725...
摘要:上下文切換上下文最直觀(guān)的表現(xiàn)就是代碼塊中的,通常在面向?qū)ο蟮木幊讨杏玫?,?lái)指代當(dāng)前類(lèi)生成的對(duì)應(yīng)實(shí)例,與其他語(yǔ)言的一致。咦,是干嘛的,有沒(méi)有其他方式實(shí)現(xiàn),請(qǐng)自行谷歌。 分享第一篇,關(guān)于 NodeJS —— Javascript 的常用知識(shí)以及如何從 Javascript 開(kāi)發(fā)者過(guò)渡到 NodeJS 開(kāi)發(fā)者(不會(huì)介紹具體的框架)。在讀本文前,希望你對(duì) javascript 有一些初步的認(rèn)識(shí)...
摘要:本文是重溫基礎(chǔ)系列文章的第七篇。系列目錄復(fù)習(xí)資料資料整理個(gè)人整理重溫基礎(chǔ)語(yǔ)法和數(shù)據(jù)類(lèi)型重溫基礎(chǔ)流程控制和錯(cuò)誤處理重溫基礎(chǔ)循環(huán)和迭代重溫基礎(chǔ)函數(shù)重溫基礎(chǔ)表達(dá)式和運(yùn)算符重溫基礎(chǔ)數(shù)字本章節(jié)復(fù)習(xí)的是中的時(shí)間對(duì)象,一些處理的方法。 本文是 重溫基礎(chǔ) 系列文章的第七篇。今日感受:做好自律。 系列目錄: 【復(fù)習(xí)資料】ES6/ES7/ES8/ES9資料整理(個(gè)人整理) 【重溫基礎(chǔ)】1.語(yǔ)法和數(shù)據(jù)類(lèi)型...
摘要:字符的表示法允許采用形式表示一個(gè)字符,其中表示字符的碼點(diǎn)。方法,用來(lái)將字符的不同表示方法統(tǒng)一為同樣的形式,這稱(chēng)為正規(guī)化。,默認(rèn)參數(shù),表示標(biāo)準(zhǔn)等價(jià)合成,返回多個(gè)簡(jiǎn)單字符的合成字符。返回布爾值,表示參數(shù)字符串是否在原字符串的頭部。 ECMAScript6/ES6 入門(mén) let和const命令變量的解構(gòu)賦值 五、字符串的擴(kuò)展 注:這章沒(méi)什么可以理解的,看過(guò)一遍就行,所以大體上我把有用的一些東...
摘要:我不是的深度用戶(hù)只是日常會(huì)遇到一些時(shí)間格式化的需求之前用的都是不過(guò)對(duì)的感到有些不舒服同事介紹過(guò)里邊用不可變數(shù)據(jù)的風(fēng)格設(shè)計(jì)的所以就試試上星星很多請(qǐng)放心食用是項(xiàng)目的某個(gè)維護(hù)者開(kāi)發(fā)的按照他個(gè)人想法進(jìn)行了改進(jìn)除了不可變性使用的工具做了更新也嘗試到時(shí) 我不是 Moment 的深度用戶(hù), 只是日常會(huì)遇到一些時(shí)間格式化的需求,之前用的都是 Moment, 不過(guò)對(duì) Moment 的 mutable A...
閱讀 3346·2023-04-26 01:31
閱讀 1965·2023-04-25 22:08
閱讀 3627·2021-09-01 11:42
閱讀 2892·2019-08-30 12:58
閱讀 2253·2019-08-29 18:31
閱讀 2493·2019-08-29 17:18
閱讀 3121·2019-08-29 13:01
閱讀 2619·2019-08-28 18:22