let const与作用域

**

let const与作用域

**
let## 标题
类似于var,但所声明的变量只在let命令所在的代码块有效。

{
	let a=10;
	var b=1;
}
console.log(b);
console.log(a);

1

其中for循环的计数器就很适用let命令。

//

for(let i=0;i<3;i++){
	let i='abc';
	console.log(i);
}

for循环在设置循环变量的部分是一个父作用域,循环体内部又是一个独立的子作用域。

//
var声明的变量无论其实际声明位置在何处,都会被视为声明于所在函数(或全局)的顶部,这就是变量提升。

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

let命令不允许重复声明

作用域

变量或函数在起作用的区域。
javascript采用的是“词法作用域”,即在变量作用域取决于变量所在的代码区域。
es6中新增了“块作用域”,也包含了es5中的“全局作用域”和“函数作用域”。
全局作用域
在所有函数之外定义的变量拥有全局作用域,该变量为全局变量。
全局变量可以在当前页面中任何javascript代码中访问。
函数作用域
在函数中声明的变量(包括函数参数)指定在其所申明的函数内被访问。
块作用域
由{}界定的代码区域,let声明的变量具备可访问块作用域。
实列代码
var v1 = 100;
function f1()[
console.log(v1,v2);
var v1 = 110;
var v2 = 200;
function f2(){
let v3 = 300;
console.log(v1,v2,v3);
}
f2();
console.log(v1,v2,v3);
}
f1();
console.log(v1,v2,v3);

作用域链
每一段JavaScript代码(全局代码或者函数)都有一个与之关联的作用域链(scope chain)
当JavaScript查找变量x的时候(变量解析),会从当前作用域开始跟随作用域向上查找,直到找到x变量的声明,若到达全局作用域中仍未找到,则抛出一个引用错误异常。
es5中只有全局作用域和函数作用域。
es6中let为JavaScript新增了块级作用域
es6允许块级作用域任意嵌套,一对{}几位一个块级作用域
内层作用域可以定义与外层作用域同名变量
块级作用域的出现使得es5中惯用的IIFE,不再必要了。
const命令
声明一个只读的常量,一但声明,其值不能改变且必须立即初始化。
其他和let用法一致

当常量保存的不是一个值,而是一个地址的时候,该常量所引用的对象是可以更改成员的,只是不能更改常量保存的地址。

顶层对象
浏览器的顶层对象为window,Node的为global
var定义的变量会关联到顶层对象中,let和const不会

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值