摘要:声明的变量只在其所在的代码块内有效。只要在声明之前使用这些变量,就会报错。在语法上称为暂时性死区有时候,会不经间遇到比较隐蔽的死区,不太容易被发现。不允许重复声明不允许在相同的作用域内声明同一个变量。一旦声明,其值就不能再改变。
let && const let let声明的变量只在其所在的代码块内有效。
{ let a = 10; } console.log(a) //ReferenceError:a is not definedlet声明变量不存在变量提升
let不像var那样会发生“变量提升”现象,所以,变量一定要在声明后使用,不然就会报错。
console.log(a) //ReferenceError:a is not defined let a = 10;暂时性死区
只要块级作用域内存在let关键字,它所声明的变量就绑定这个区域,不再受外部影响。
var tmp = 20; if(true){ tmp = "abc"; //ReferenceError:tmp is not defined let tmp; }
上面的代码中存在全局变量tmp,但是块级作用域内let又声明了一个局部变量tmp,导致后者绑定了这个块级作用域,所以在let声明变量前,对tmp赋值会报错。
ES6明确规定,如果区块中存在let和const命令,则这个区块对这些命令声明的变量从一开始就形成封闭作用域。只要在声明之前使用这些变量,就会报错。在语法上称为“暂时性死区(temporal dead zone,TDZ)”
有时候,会不经间遇到比较隐蔽的“死区”,不太容易被发现。
function bar(x=y,y=2){ return [x,y]; } bar() //报错
上面的代码中是因为参数x的默认值等于另一个参数y,而此时y还没有声明,属于死区。
不允许重复声明let不允许在相同的作用域内声明同一个变量。
function bar(){ let a = 10; var a = 20; } //报错 function bat(){ let a = 10; let a = 20; } //报错
因此,所以也不能在函数内重复声明参数:
function bar(args){ let args = 10; } bar() //报错 function bar(args){ { let args = 20; } } bar() //不报错块级作用域
外层代码块不受内层代码块的影响。
外层作用域无法读取内层作用域的变量。
内层作用域可以定义外层作用域的同名变量。
块级作用域的实现,使得广泛使用的自执行匿名函数(IIFE)变得不再必要了。
//自执行模式 (function(){ var a = 10; })() //块级作用域写法 function(){ let a = 10; }
函数本身的作用域也在其所在的块级作用域之内。
constconst用来声明常量。一旦声明,其值就不能再改变。
const PI = 3.1415; const PI = 3 //TypeErrorL "PI" is read-only
const声明的变量不得改变值,意味着const一旦声明常量就必须立即初始化,不能留到后面赋值。
const与let关键字一样,只在声明所在的块级作用域内有效;const关键字声明的常量也不提升,同样存在暂时性死区,只能在声明后使用。
对于复合型数据类型,常量名不指向数据,而是指向数据所在的地址。const关键字只是保证常量名指向的地址不变,并不保证该地址的数据不变,所以将一个对象声明为常量必须注意该点。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/78624.html
摘要:理解元编程和是属于元编程范畴的,能介入的对象底层操作进行的过程中,并加以影响。元编程中的元的概念可以理解为程序本身。中,便是两个可以用来进行元编程的特性。在之后,标准引入了,从而提供比较完善的元编程能力。 导读 几年前 ES6 刚出来的时候接触过 元编程(Metaprogramming)的概念,不过当时还没有深究。今天在应用和学习中不断接触到这概念,比如 mobx 5 中就用到了 Pr...
摘要:的出现,使用内建对象的继承得以实现。属性不存在抛出异常是取值操作,而就是赋值操作,可以对属性值进行验证。属性必须为数字抛出异常接受两个参数被读取属性的原对象,即代理的目标。这个可以拦截内部方法,通过返回数组的值可以覆写其行为。 Proxy & Reflect extends的出现,使用内建对象的继承得以实现。Proxy可以拦截JS引擎内部目标的底层对象操作,这些底层操作被拦截后会触发响...
let和const let和const两者并不存在变量提升 这里要说明的是变量一定要在声明后使用,否则报错。 vara=[]; for(vari=0;i<10;i++){ a[i]=function(){ console.log(i); }; } a[6]();//10 变量i是var声明的,我们要知道这里在全局范围内都有效。我们要知道在每一次循环中,新的...
摘要:更好的语义和分别表示异步和等待,比起和更容易理解。前边声明关键字,表示内部有内部操作,调用函数会返回一个对象。等价于其中函数就是自动执行器。 async函数 定义 async函数其实就是之前说过的Generator的语法糖,用于实现异步操作。它是ES2017的新标准。 读取两个文件: const fs = require(fs) const readFile = function(f...
摘要:副作用,无副作用可执行和关键词。和不能像一样同一个下声明多次和不会像一样变量声明提升原因是,存在因此不能,赋值前使用变量。 showImg(https://segmentfault.com/img/bVbhPlD?w=1271&h=715); 关键词: let ,const, blocking scope ,temporal dead zone,redeclaration,reassi...
阅读 2511·2021-10-12 10:12
阅读 759·2019-08-29 17:25
阅读 2754·2019-08-29 17:24
阅读 3178·2019-08-29 17:19
阅读 1773·2019-08-29 15:39
阅读 2998·2019-08-26 16:50
阅读 1946·2019-08-26 12:17
阅读 2679·2019-08-26 12:16