您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

ES6系列之声明变量let与const

2024/6/21 5:42:31发布18次查看
本篇文章主要是向大家分享了关于es6系列的声明变量let与const,有兴趣的朋友们可以参考一下本文中的内容
简介概念es6 的第一个版本,在 2015 年 6 月发布了,正式名称就是《ecmascript 2015 标准》(简称 es2015)。es6 既是一个历史名词,也是一个泛指,含义是 5.1 版以后的 javascript 的下一代标准,涵盖了 es2015、es2016、es2017 等等,而 es2015 则是正式名称,特指该年发布的正式版本的语言标准。
各大浏览器对es6的支持:kangax
babelbabel 是一个广泛使用的 es6 转码器,可以将 es6 代码转为 es5 代码,从而在现有环境执行。
babel 的配置文件是.babelrc,存放在项目的根目录下。使用 babel 的第一步,就是配置这个文件。
声明变量es5 只有两种声明变量的方法:var命令和function命令,es6 除了添加let、const、import和class命令。所以,es6 一共有 6 种声明变量的方法。
es5 之中,顶层对象的属性与全局变量是等价的。es6 为了改变这一点,一方面规定,为了保持兼容性,var命令和function命令声明的全局变量,依旧是顶层对象的属性;另一方面规定,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。也就是说,从 es6 开始,全局变量将逐步与顶层对象的属性脱钩。letes6 新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。
{ let a = 10; var b = 1; } a // referenceerror: a is not defined. b // 1
不允许重复声明let不允许在相同作用域内,重复声明同一个变量。
// 报错 function func() { let a = 10; var a = 1; } function func(arg) { let arg; // 报错 } function func(arg) { { let arg; // 不报错 } }
块级作用域es6 允许块级作用域的任意嵌套。
内层作用域可以定义外层作用域的同名变量。
外层作用域无法读取内层作用域的变量。
{{{{ {let insane = 'hello world' {let insane = 'hello world'} } console.log(insane); // 报错 }}}};
块级作用域与函数声明es5 规定,函数只能在顶层作用域和函数作用域之中声明,不能在块级作用域声明。
es6 规定,块级作用域之中,函数声明语句的行为类似于let,在块级作用域之外不可引用。
考虑到环境导致的行为差异太大,应该避免在块级作用域内声明函数。如果确实需要,也应该写成函数表达式,而不是函数声明语句。
不存在变量提升let命令所声明的变量一定要在声明后使用,否则报错。
// var 的情况 console.log(foo); // 输出undefined var foo = 2; // let 的情况 console.log(bar); // 报错referenceerror let bar = 2;
暂时性死区只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。
var tmp = 123; if (true) { tmp = 'abc'; // referenceerror let tmp; }
在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 tdz)。
constconst声明一个只读的常量。一旦声明,常量的值就不能改变。
只在声明所在的块级作用域内有效。
const命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用。
const pi = 3.1415; pi // 3.1415 pi = 3; // typeerror: assignment to constant variable.
本质const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指针,const只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,就完全不能控制了。因此,将一个对象声明为常量必须非常小心。
const foo = {}; // 为 foo 添加一个属性,可以成功 foo.prop = 123; foo.prop // 123 // 将 foo 指向另一个对象,就会报错 foo = {}; // typeerror: "foo" is read-only
如果真的想将对象冻结,应该使用object.freeze方法。
const foo = object.freeze({}); // 常规模式时,下面一行不起作用; // 严格模式时,该行会报错 foo.prop = 123;
以上就是es6系列之声明变量let与const 的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product