let、const的命令

Let命令

基本用法

声明变量(只在let命令所在的代码块内有效)

*var全局变量都有效

不存在变量提升

Var发生“变量提升”,undefined的最初值就是原始数据类型undefined

Let在脚本运行前,并不存在原始数据,会报错

暂时性死区

ES6中,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。

在代码块内,使用let声明变量之前,该变量不可用,成为称谓“暂时性死区”(TDZ)(进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。

在let声明变量tmp之前,都属于tmp死区

在没有let之前,typeof运算符是百分之百安全的,永远不会报错。但是,“暂时性死区”会使typeof出现报错。

不允许重复声明

Let不允许在相同作用域内,重复声明同一个变量。

 

块级作用域

Es6的块级作用域(Let为js新增了块级作用域)es5只有全局作用域和函数作用域

允许块级作用域的任意嵌套(内层作用域可以定义外层作用域的同名变量)

块级作用域与函数声明

Es5中函数只能在等曾作用域和函数作用域中声明

ES6 引入了块级作用域,明确允许在块级作用域之中声明函数。(浏览器的实现可以不遵守规定,有自己的行为方式)

Es6的块级作用域必须有大括号,如果没有大括号,js引擎就认为不存在块级作用域。

 

 

Const命令

基本用法

Const声明一个只读的常量,一旦声明,常量的值就不能改变。

const只在声明所在的块级作用域内有效,const声明的变量也是不提升,存在暂时性死区,不可重复声明。

*const只能保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,就完全不能控制了。

 

Es6声明变量的方法

ES5 声明变量的方法:var命令和function命令。

ES6 声明变量的方法:let和const命令,import命令和class命令。

 

顶层对象的属性

顶层对象,在浏览器环境指的是window对象,在 Node 指的是global对象。

ES6为了保持兼容性,var命令和function命令声明的全局变量,依旧是顶层对象的属性(let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。)

 

 

Globalthis对象

js存在一个顶层对象,提供全局环境(即全局作用域),所有代码都是在这个环境中运行。

*全局环境中,this会返回顶层对象。但是,Node.js 模块中this返回的是当前模块,ES6 模块中this返回的是undefined。

*函数里面的this,如果函数不是作为对象的方法运行,而是单纯作为函数运行,this会指向顶层对象。但是,严格模式下,这时this会返回undefined。

*不管是严格模式,还是普通模式,new Function('return this')(),总是会返回全局对象。但是,如果浏览器用了 CSP(Content Security Policy,内容安全策略),eval、new Function这些方法都可能无法使用。

 

任何环境下,globalthis都是存在的,指向全局环境下的this。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值