ECMAScript6基础之var、let与const的区别

一、 var与let的区别

(1) 变量声明

<script type="text/javascript">
	var a = 1;
	var a = 2;
	a = 3;
	console.log(a);
	/*
		var: 
		1.同一作用域内可以重复声明且声明后可以改变它的值
		2.a是全局变量
	*/
</script>
<script type="text/javascript">
	let a = 1;
	//var a = 2; 报错
	a = 3;
	console.log(a);
	/*
		let : 
		1.同一作用域内不可以重复声明且声明后可以改变它的值
		2.a是全局变量
	*/
</script>

(2) 作用域
任何程序设计语言都有作用域的概念,简单的说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。

<script type="text/javascript">
	if(true){
	var a = 1;
	}
	console.log(a);
	/*
		var :
			1.全局作用域
			2.函数作用域
			3.a全局变量
	*/
	</script>
<script type="text/javascript">
	let a =1
	{
		let a =2;
		console.log(a); //输出2
	}
	console.log(a); //输出1
	/*
		let :
			1.全局作用域
			2.块级作用域 {}
			3.输出1的a是全局变量,输出2的a是局部变量
	*/
</script>

(3) 预解析

<script type="text/javascript">
	console.log(a); //输出 undefined
	var a =1;
	/*
		var : 
		1.存在预解析
		2.a 全局变量
	*/
</script>
<script type="text/javascript">
	console.log(a); //报错
	let a =1;
	/*
		let: 
		1.不存在预解析
		2.a 全局变量
	*/
</script>

二、 const常量

<script type="text/javascript">
	console.log(a); //报错
	const a =1;
	/*
		const: 
		1.全局作用域
		1.不存在预解析
		2.全局变量
	*/
</script>
<script type="text/javascript">
    const a =1;
	const a =2; //报错
	
	/*
		const: 
		1.不能重复声明
		2.全局变量
	*/
</script>
<script type="text/javascript">
	
	{
		const a =1;
		console.log(a); //输出1
	}
	console.log(a);//报错
	const a =1;
	/*
		const: 
		1.块级作用域
		2.局部变量
	*/
</script>

三、 作用域

<script type="text/javascript">
	 (function() {
        var a = 1;
        console.log(a); // 输出 1
    })();
    // console.log(a); // 报错

	/*
		通过var定义的变量只能在块级作用域内访问不能跨函数作用域访问
	*/
</script>
<script type="text/javascript">
	 {
        var a = 1;
        console.log(a); // 1
    }
    console.log(a); // 1
	/*
		此处var变量属于全局变量,可以跨块级作用域访问到。
	*/
</script>
<script type="text/javascript">
	 {
        let a = 1;
        console.log(a); // 1
    }
    console.log(a); // 1
	/*
		此处let变量是属于局部变量,不可以跨块级作用域访问到。
	*/
</script>
<script type="text/javascript">
	if(true) {
        var a = 1;
    }
    console.log(a); // 1
    for(var i = 0; i < 2; i ++) {
        var b = 3;
    };
    console.log(i); // 2 
    console.log(b); // 3
	/*
		if语句和for语句中用var变量可以在外面访问到属于全局变量
        if语句和for语句属于块级作用域,不属于函数作用域
	*/
</script>
  • var:同一作用域内可以重复声明且声明后可以改变它的值、全局作用域、函数作用域、存在预解析。
  • let:同一作用域内不可以重复声明且声明后可以改变它的值、全局作用域、块级作用域、不存在预解析。
  • const:同一作用域内不可以重复声明、声明时必须赋值且声明后不可以改变它的值、全局作用域、块级作用域、不存在预解析。
  • if语句和for语句属于块级作用域,不属于函数作用域。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值