您的位置:首页 > Web前端 > JavaScript

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

2019-06-01 19:12 218 查看
版权声明:属原创,引用请指明出处 https://blog.csdn.net/qq_43624878/article/details/90732470

自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的值并没有发生改变

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: