摘要:和不同,沒(méi)有變量提升,聲明之前,該變量都是不可用的。聲明創(chuàng)建一個(gè)只讀的常量。這不意味著常量指向的值不可變,而是變量標(biāo)識(shí)符的值只能賦值一次。聲明同時(shí)必須賦值。
LET和const命令
var
變量聲明提升原則
var語(yǔ)句聲明的變量的作用域是當(dāng)前執(zhí)行位置的上下文
給一個(gè)非聲明變量賦值會(huì)隱式創(chuàng)建一個(gè)全局變量(全局object的一個(gè)屬性),注意這里是非聲明賦值
聲明和賦值是兩回事,注意區(qū)分,referenceError和undefined
函數(shù)執(zhí)行時(shí),函數(shù)內(nèi)部的變量才會(huì)聲明,并且只聲明一次,不會(huì)重復(fù)聲明,執(zhí)行完成后銷(xiāo)毀,函數(shù)內(nèi)調(diào)用時(shí)為調(diào)用其引用
let
和var不同,聲明可以是塊級(jí)的,也就是for函數(shù)內(nèi)的n個(gè)函數(shù)塊,let會(huì)聲明n個(gè)變量( 每進(jìn)入一次for花括號(hào)就生成了一個(gè)塊級(jí)域 )
和var不同,重復(fù)定義會(huì)報(bào)錯(cuò)typeError 如果在子域內(nèi)重復(fù)聲明,是可以的。
和var不同,沒(méi)有變量提升, let聲明之前,該變量都是不可用的。稱之為: 暫時(shí)性死區(qū)(temproal dead zone簡(jiǎn)稱 TDZ)
let 塊 提供了一種在塊的范圍內(nèi)獲取變量的值,而不會(huì)影響塊外面名字相同的變量的值的方法
var x = 5; var y =0; let(x = x+10, y =12) { //這里隱式創(chuàng)建了一個(gè)包圍 expr 的語(yǔ)句塊。 console.log(x+y);// 27 } console.log(x + y); // 5
用 var 或 let 聲明的未賦初值的變量,值會(huì)被設(shè)定為 undefined
- let聲明的變量只在它所在的代碼塊有效,而非var為函數(shù)作用域 - let不會(huì)變量聲明提前,未聲明前使用,直接報(bào)錯(cuò),var不會(huì)報(bào)錯(cuò)undefined - let回暫時(shí)性死區(qū),一旦區(qū)塊內(nèi)let聲明了a,全局變量a不會(huì)在該區(qū)塊起 - let不允許在相同作用域內(nèi),重復(fù)聲明同一個(gè)變量
- 防止內(nèi)層變量可能覆蓋外層變量 - for循環(huán)的i變量控制循環(huán),防止泄露
- 使用{}代替立即執(zhí)行匿名函數(shù)(IIFE) - ES5的嚴(yán)格模式規(guī)定,函數(shù)只能在頂層作用域和函數(shù)內(nèi)聲明,其他情況(比如if代碼塊、循環(huán)代碼塊)的聲明都會(huì)報(bào)錯(cuò)。 - ES6由于引入了塊級(jí)作用域,這種情況可以理解成函數(shù)在塊級(jí)作用域內(nèi)聲明,因此不報(bào)錯(cuò),但是構(gòu)成區(qū)塊的大括號(hào)不能少,否則還是會(huì)報(bào)錯(cuò)。
const 聲明創(chuàng)建一個(gè)只讀的常量。這不意味著常量指向的值不可變,而是變量標(biāo)識(shí)符的值只能賦值一次。聲明同時(shí)必須賦值。
- 聲明一個(gè)只讀的常量。一旦聲明,常量的值就不能改變,這意味著,const一旦聲明變量,就必須立即初始化,不能留到以后賦值。 - const的作用域與let命令相同: 只在聲明所在的塊級(jí)作用域內(nèi)有效 const命令聲明的常量也是不提升 同樣存在暫時(shí)性死區(qū),只能在聲明的位置后面使用 同樣不可重復(fù)聲明 - 對(duì)于復(fù)合類(lèi)型的變量(例如對(duì)象、數(shù)組),變量名不指向數(shù)據(jù),而是指向數(shù)據(jù)所在的地址。 const命令只是保證變量名指向的地址不變,并不保證該地址的數(shù)據(jù)不變,所以將一個(gè)對(duì)象聲明為常量必須非常小心。 如果真的想將對(duì)象凍結(jié),應(yīng)該使用Object.freeze方法,地址數(shù)據(jù)也不會(huì)變了
- ES6:var/function/let/const/import/class - ES5:var/function
- var命令和function命令聲明的全局變量,依舊是全局對(duì)象的屬性 - let命令、const命令、class命令聲明的全局變量,不屬于全局對(duì)象的屬性,eg:`let b = 1; window.b 為undefined`
book url:http://es6.ruanyifeng.com/#do...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/79430.html
摘要:外層作用域不報(bào)錯(cuò)正常輸出塊級(jí)作用域與函數(shù)聲明規(guī)定,函數(shù)只能在頂層作用域和函數(shù)作用域之中聲明,不能在塊級(jí)作用域聲明。規(guī)定,塊級(jí)作用域之中,函數(shù)聲明語(yǔ)句的行為類(lèi)似于,在塊級(jí)作用域之外不可引用。同時(shí),函數(shù)聲明還會(huì)提升到所在的塊級(jí)作用域的頭部。 前言:最近開(kāi)始看阮一峰老師的《ECMAScript 6 入門(mén)》(以下簡(jiǎn)稱原...
摘要:的作用域與命令相同只在聲明所在的塊級(jí)作用域內(nèi)有效。數(shù)值和布爾值的解構(gòu)賦值解構(gòu)賦值時(shí),如果等號(hào)右邊是數(shù)值和布爾值,則會(huì)先轉(zhuǎn)為對(duì)象。上面代碼中,數(shù)值和布爾值的包裝對(duì)象都有屬性,因此變量都能取到值。默認(rèn)值解構(gòu)賦值允許指定默認(rèn)值。 最近正在學(xué)習(xí)ES6,對(duì)于ES6的語(yǔ)法有一些自己的理解, 想寫(xiě)這篇文章幫助跟我一樣的新手快速入門(mén)ES6而不至于連代碼都看不懂. 至于開(kāi)發(fā)環(huán)境的搭建什么...
摘要:和命令命令是在它所在的代碼塊有效,它屬于塊級(jí)作用域,新增。只有全局作用域和函數(shù)作用域。 let和const命令 let命令是在它所在的代碼塊有效,它屬于塊級(jí)作用域,es6新增。es5只有全局作用域和函數(shù)作用域。let命令存在暫時(shí)性死區(qū)(TDZ),即在申明前使用就會(huì)報(bào)錯(cuò),不存在變量提升 console.log(a); // 報(bào)錯(cuò) let a = 111; ==let不允許在相同作用域中,...
摘要:入門(mén)一前言由于最近本人在學(xué)習(xí),做一些筆記能夠更好的熟悉,就趁此機(jī)會(huì)來(lái)寫(xiě)一篇關(guān)于的新人學(xué)習(xí)摘要吧。的作用域與命令相同只在聲明所在的塊級(jí)作用域內(nèi)有效。塊級(jí)作用域新增方式和實(shí)際上為新增了塊級(jí)作用域。同時(shí),函數(shù)聲明還會(huì)提升到所在的塊級(jí)作用域的頭部。 ECMAScript6/ES6 入門(mén) 一、前言 由于最近本人在學(xué)習(xí)ES6,做一些筆記能夠更好的熟悉,就趁此機(jī)會(huì)來(lái)寫(xiě)一篇關(guān)于ES6的新人學(xué)習(xí)摘要吧。...
摘要:但是有了尾調(diào)用優(yōu)化之后,遞歸函數(shù)的性能有了提升。常被用來(lái)檢查對(duì)象中是否存在某個(gè)鍵名,集合常被用來(lái)獲取已存的信息。循環(huán)解構(gòu)對(duì)象本身不支持迭代,但是我們可以自己添加一個(gè)生成器,返回一個(gè),的迭代器,然后使用循環(huán)解構(gòu)和。 一、let和const 在JavaScript中咱們以前主要用關(guān)鍵var來(lái)定義變量,ES6之后,新增了定義變量的兩個(gè)關(guān)鍵字,分別是let和const。對(duì)于變量來(lái)說(shuō),在ES5中...
一、塊級(jí)作用域 1. var 首先看看ES5中得變量聲明方式 if (true) { var a = 2 } console.log(a) // 2 以上代碼等同于 var a if (true) { a = 2 } console.log(a) 以上可知 : 在塊內(nèi)部定義變量 變量提升,到函數(shù)最頂部 通過(guò)var聲明的變量,無(wú)論在何處聲明,均為全局作用域 2.let 和 ...
閱讀 2053·2021-11-22 13:52
閱讀 976·2021-11-17 09:33
閱讀 2708·2021-09-01 10:49
閱讀 2841·2019-08-30 15:53
閱讀 2659·2019-08-29 16:10
閱讀 2432·2019-08-29 11:31
閱讀 1343·2019-08-26 11:40
閱讀 1866·2019-08-26 10:59