let和const以及块级作用域问题

在es6中,新增了let命令,其和var声明一样的,但是let只能在其声明的作用域范围内使用
在for循环时,因为这一特性,我们可以将循环下标用let声明,因为这样下标索引i的值在外部访问不到,还要记住for循环一个特殊点,设置的循环变量的那一部分是父作用域,而循环本体内部是一个单独的子作用域。
let注意点:
在同一个作用域内,不允许同时出现let和let,let和var
let不存在变量提升,在变量未声明之前和使用它的那一段叫做暂时性死区

块级作用域
目的:
解决内层变量户会覆盖外层变量的问题
避免用来计数的循环变量泄露为全局变量

外层作用域范围无法读取内层变量

因为浏览器,es5和es6功能有矛盾的部分,所以应该避免在块级作用域内声明函数,如果确实有需要,应该把函数写成函数表达式,而不是函数声明式。

const声明一个只读的常量,一旦声明之后,常量的值就不会改变。
const注意点:
一旦一个变量用const声明后,只要声明就要马上赋值,立即进行初始化,不能等到以后在赋值。
const也只在声明的块级作用域内有效
const也存在暂时性死区

const实际上保证的并不是变量的值不变,而是变量指向的那个内存地址所保存的数据不得改变,对于原始值,它基本就相当于一个不变的常量,对于一个对象,它保存的是这个指针是固定的,也就是它总是指向另一个固定的地址,它里面的数据结构可不可变,是完全不能控制的。
在这里插入图片描述
顶层对象属性
浏览器的顶层对象为window,node的顶层对象为global

在全局对象下用var声明的变量,用window.变量名,是可以访问到其值的
而在用let声明的变量,用window.变量名是访问不到的,这样就说明从es6开始全局变量属性逐步与顶层对象属性脱钩。

globalThis对象
js语言存在一个顶层对象,即存在一个全局环境(即全局作用域),所有代码都是在这个环境中运行,但是在各种实现里,全局对象是不统一的。

浏览器是window
浏览器和web worker里面,self也指向顶层对象
node里面,顶层对象为global,但其他环境不支持
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值