一篇搞懂let,const,var 呀

4 篇文章 0 订阅

浅聊一下let const var

QQ图片20210824224504.jpg
前言:let, const,var是很常见的,但是总是对它有一点模模糊糊的,像在我面前隔了一层面纱,所以看了许多篇文章,小小的总结了一下,希望我自己能搞懂它,也希望对各位有所帮助。(文中的例子都是经过vscode验证过的)

1. var

  • 由它声明的变量是全局变量或者顶层变量
  • 可以重复声明和赋值
  • 在函数内部,由var声明的变量是局部的,但是若是直接给变量赋值,那就是全局变量
function foo(){
	var a = 1 //这是一个局部变量,不能通过全局对象访问
	b = 2 //这是一个全局变量,通过全局对象可以访问到
}
  • var存在声明提升
	console.log(a) //不会报错,结果是undefined
	var a = 2

2. let

  • 声明的变量只在let所在的块作用域中有效
	console.log(a) //报错;ReferenceError: a is not defined
	{
		let a = 1
	}
	console.log(a)//报错;ReferenceError: a is not defined

:: 如果是var的话,var声明的就是全局变量
 console.log(a); //因为有变量提升: undefied

{var a = 1} 

console.log(a); // 1
  • 有暂时性死区
	console.log(a) //直接报错;ReferenceError: Cannot access 'a' before initialization
	let a = 1
  • 在同一作用域内不能重复声明,能重复赋值

3. const

  • 声明的变量只在const所在的块作用域中有效
  • 是只读的常量
    如果是定义的引用数据类型,比如数组,数组中的值是可以改变的,因为const 固定的是它的引用地址
  • 存在暂时性死区:未声明之前不可以使用
  • 一旦声明必须要进行初始化

4. 遇到过的一个面试题: var不管在哪里声明的变量都会挂载在 全局对象上吗?

(我当时说var声明的变量是全局变量,可以通过全局对象来访问)

不是。在一个函数内,var声明的变量只在这个函数作用域中可以访问到,外层作用域,还有window都是访问不到的。
也就是说,在函数中用var声明的变量是局部的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值