【JS学习】let、const与作用域

在ES5以及以前版本的JavaScript中,使用的是var来声明变量,并且不支持块级作用域。
ES6中新增了let和const两个关键字用于控制作用域。

作用域

作用域限制变量的访问区域,限制变量在当前作用域完成工作。
JS中采用的是词法作用域,即变量作用域取决于变量所在的代码区域。

ES5中的作用域:全局作用域、函数作用域。
ES6新增作用域:块作用域。

全局作用域

  • 在所有函数之外定义的变量拥有全局作用域,该变量为全局变量
  • 全局变量可以在当前页面任何的JS代码中访问。

函数作用域
在函数中声明的变量(包括函数参数)指定在其所生命的函数内被访问。
块作用域
由{ }界定的代码区域,le声明的变量可以访问块作用域。

let命令

1.基本用法
类似于var,但是所声明的变量只在let命令所在的代码块有效,即在块作用域中生效。
例如:

{
	let a = 10;
	var b = 20;
}
console.log(a);		//a is not defined
console.log(b);		//20

此时,console.log(a)会出现报错: a is not defined,而console.log(b)可以正常输出,不会报错。
:undefined:声明了但未初始化;not defined:报错,意思是没有定义。

2.不存在变量提升

变量提升即在变量声明之前就可以使用。
var声明的变量无论其实际声明位置在何处,都会被是为声明于所在函数(或全局)的顶部,这就是变量提升。
var定义的变量会关联到顶层对象中,let和const不会。

console.log(a)		//undefined
var a = 2;

console.log(b)		//报错
let b = 1;

var定义的变量,在JS进行运行时,var定义的变量就已经存在了,但是没有进行赋值,因而在输出时就会输出undefined。
let定义的变量,在进行初始化之前都是不存在的,因而会报错。

for循环的计数器命令,很适合使用let命令。
在这里插入图片描述
此处的 i 只在 { }内有效,在块作用域之外使用 i 就会报错。
但是使用var的时候,全局范围内都有效,全局范围内只能存在一个同名的变量。

3.暂时性死区

在代码块内,使用let命令声明变量之前,该变量都是不可用的,这个区域被称为“暂时性死区”。
:ES6中明确规定,如果区块中存在let和const命令,则这个区块对这些命令声明的变量从一开始就形成封闭作用域。

4.不允许重复声明
重复声明变量名相同的变量会报错。

const命令

基本用法

与let的用法类似,但是声明一个只读的常量,一旦声明,其值不能改变必须立即初始化
声明一个只读的常量,一旦声明,其值不能改变且必须立即初始化。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值