前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >前端基础-ECMAScript块级作用域

前端基础-ECMAScript块级作用域

作者头像
cwl_java
发布2020-03-26 16:23:04
3950
发布2020-03-26 16:23:04
举报
文章被收录于专栏:cwl_Javacwl_Java

第2章 块级作用域

2.1 块级作用域

JS中作用域有:全局作用域、函数作用域。

ES6中新增了块级作用域。 块作用域由 { } 包括,if语句和for语句里面的{ }就属于块作用域。(不包括函数)

代码语言:javascript
复制
//注意 块级作用域中,使用var声明的变量是全局变量
{
	var a = 1;
	console.log(a);//1
}
console.log(a);//1

if(true){
	var b = 2;
	console.log(b);//2
}
console.log(b);//2

2.2、let关键字声明块级变量

ES6中增加了let关键字声明变量,声明的变量只在当前代码块中生效(块级作用域)。

代码语言:javascript
复制
<script>
    if(true){
        let i=0;
        console.log(i);
    }
  console.log(i);//报错
</script>
<script>
    for(let i=0; i<=6; ++i){
        console.log(i);
    }
    console.log(i);//报错
</script>

使用let声明的变量可以重新赋值,但是不能在同一作用域内重新声明

代码语言:javascript
复制
<script>
  	// let声明的变量可以重新赋值
    {
        let a = 1;
      	console.log(a);
      	a = 2;
     	console.log(a);;
    }
</script>

<script>
  // let声明的变量不能在同一作用域重新声明,直接报错 预解析错误
  {
  	let a = 1;
  	console.log(a);
  	let a = 2;
  	console.log(a);
}
</script>

2.3、let变量没有变量提升

代码语言:javascript
复制
{
 	console.log(i);//报错
	let i = 8;
}

2.4、应用:let块级变量解决i丢失的问题

代码语言:javascript
复制
var arr = [3,4,5,6,7];

for(let i=0; i<arr.length; i++){
	// (function(i){
		setTimeout(function(){
			console.log(i);
			//console.log(arr[i]);
		}, 1000);
	// })(i);
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第2章 块级作用域
    • 2.1 块级作用域
      • 2.2、let关键字声明块级变量
        • 2.3、let变量没有变量提升
          • 2.4、应用:let块级变量解决i丢失的问题
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档