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