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的值并没有发生改变
相关文章推荐
- js中用this,var,let 声明的变量的区别
- js中变量修饰 var,let,const的区别
- js中const,var,let区别
- var和let的区别以及const的作用
- const、let、var区别+js严格模式
- js中const,var,let区别
- JS中 var 和 let 关键字的区别
- js中const,var,let区别
- js中const,var,let区别
- js中const,var,let的区别
- JS中const,var,let区别
- 详解js中let与var声明变量的区别
- JS中 var 和 let 关键字的区别
- js中const,var,let区别
- JS变量中有var定义和无var定义的区别以及es6中let命令和const命令
- js中let和var的区别
- js中const,var,let区别
- js中let和var的区别 不懂得加QQ 2270312758
- js中const,var,let的区别
- 浅谈:js中const、var和let的区别