js新特性辨别:let和var的区别及作用域

自ECMAScript 6出来,加入了两个新的关键字 const 和 let…

在这里插入图片描述

从前后代码对比,唯一的区别就是在循环创建i的方式不同,一个是var,一个是i,而var出的变量,在学习js初期也是踩了不少作用域问题的坑,在循环执行完成后,i的值任然存在,而且会在离开循环行再++一次,让打印出了10;再看下方用let创建的i在离开循环时,这个i已经是被销毁的变量,所以在这个地方与var创建的变量的区别应该显而易见;
由此,得出结论:var出的变量是函数级作用域,作用范围是在函数开始阶段和函数执行完成之前内都是存在的;并且如果该函数内部还存在匿名函数等特殊函数,这个var出的变量在匿名函数中任然可以用;
let出的变量作用域是 块作用域,在离开某一代码块,该变量就会被销毁不存在.

js中使用let定义变量的时候,是需要使用严格模式的
据说,如果在不使用严格模式的情况下,使用let会报错
我们在使用let的时候添加上’use strict’即可,按照要求来使用let。

<script type="text/javascript">
    		'use strict';
    		(function(){
    			var a='kka';
    			let b='akk';
    			//重新赋值
    				var a='kkaNew';
    				let b='akkNew';
    			console.log(a);//输出kkaNew
    			console.log(b);//程序报错       Uncaught SyntaxError: Identifier 'b' has already been declared
    		})();
    	</script>

再来看这个:

	<script type="text/javascript">
    		'use strict';
    		(function(){
    			var a='kka';
    			let b='akk';
    			//重新赋值
    			if(true){
    				var a='kkaNew';
    				let b='akkNew';
    			}
    			console.log(a);//输出kkaNew
    			console.log(b);//输出akk
    		})();
    	</script>

说明在var定义变量的时候’{}'里面的a和外面的a是同一个,所以a的值会被覆盖掉

这也验证了上面所说:let是“块级”作用域元素

而且我们发现,使用let定义变量的时候’{}'里面的b和外面的b不是同一个,所以b的值并没有发生改变

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恪愚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值