JS 中的var、let和const的区别和相同

var

JavaScript没有块级作用域

在JS函数中用var声明的变量,其作用域是函数体的全部。

1
2
3
4
5
6
<script type="text/javascript">
for (var i = 0; i < 10; i++) {
var x = 8;
}
console.log(x);
</script>

这里的”x”已经跳出了”for”的作用域,却还可以被访问到。

循环内变量过度共享

看看下面这行代码会输出什么。

1
2
3
4
5
6
7
<script type="text/javascript">
for (var i = 0; i < 10; i++) {
setTimeOut(function () {
console.log(i);
}, 1000);
}
</script>

在浏览器中运行一下,你就会直到什么结果了,
没错,全部输出为10。

let

在ES6之后,let可以说成是为了解决var的bug而产生的。

  • let声明的变量具有块级作用域
  • let声明的全局变量不再是全局对象的属性
  • 在循环中会每次给变量创建新的连接
  • let重定义会抛出错误

const

ES6中的第三个声明类关键词:const
总的来说就是,const用于定义常量。

1
2
3
4
<script type="text/javascript">
const x = {a: "script"};
console.log(x.a);
</script>