ES6学习——新的语法:块级作用域概述

73 篇文章 23 订阅

在ES6之前,JS中只有两种作用域:全局和函数级别作用域。就是说你声明的变量要么可以全局访问,要么在函数内访问。当然了,函数内肯定能访问全局的变量

<script type="text/javascript">
//全局级别
var globalVar = 1;
window.globalVar2 = 2
</script>

//函数级别
(function(){
        var f1 = 1;
})();
	
function func(){
	var f2 = 2;
		
	if(true){
		var f3 = 3;
	}
}

什么是块级作用域?

规范13.2.4中有这样的描述:

When a Block or CaseBlock production is evaluated a new declarative Environment Record is created and bindings for each block scoped variable, constant, function, generator function, or class declared in the block are instantiated in the Environment Record.

至于Block和CaseBlock代表什么,请参考13.2和13.12,简单理解就是{...}代表一个块级作用域,上面的描述明确说了let,const,function,generator function,class可以是块级作用域,下面看一个概述:


上面Scope是Block的表示块级作用域,图中没有写generator function,至于什么是Temporal dead zone,后面的章节中会讲。


说了这么多,还是给几个例子更能理解:

'use strict';
	
	function blockFuncTest(){
		{
		
			blockFunc(0);
		
			function blockFunc(idx){
				console.log("blockFunc",idx);//blockFunc 0
			}		
			
		}
		
		blockFunc(1);//Uncaught ReferenceError: blockFunc is not defined
	}


'use strict'	
function blockLetConstTest(){
		var a = 0;
		const b = 0;
		{
			let a = 1;
			const b = 1;
			
			console.log(a,b);//1 1
		}
		
		console.log(a,b)//0 0
	}

注意一定要写"use strict",没有这句话,浏览器不会按照ES6规范执行程序,class和generator function的例子有兴趣的同学自己去试试

*上面的所有代码在Chrome 47下通过测试

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值