var、let、const
var的bug
var 没有块儿级作用域
for(var i=0;i<10;i++){ var a = 'guojing'; } console.log(a); //guojing console.log(i); //10
for (var i = 0; i < 3; i++) {
setTimeout(function () {
console.log(i)
}, 1000);
}
//输出三个3
var 能重复定义变量
必须使用严格模式即'use strict' 后才能使用let声明变量
for(var i=0;i<10;i++){
var a = 'guojing';
}
console.log(typeof a); //undefined
console.log(typeof i); //undefined
for (var i = 0; i < 3; i++) { setTimeout(function () { console.log(i) }, 1000); } //输出1 2 3
1.let声明的变量拥有块级作用域。
2.let声明的全局变量不是全局对象的属性(见下面例子)。
3.形如for (let x...)的循环在每次迭代时都为x创建新的绑定。
4.用let重定义变量会抛出一个语法错误(SyntaxError)。
5.let不能重复定义变量,不然浏览器会报错。
var a = 'guojing'; let b = 'huangrong'; function aaa(){ console.log(this.a); console.log(this.b); } aaa(); 输出:guojing undefined
const 用来定义常量
1.声明时必须赋值
2.不能重复定义
3.不能重新给const变量赋值
4。一般不给const修饰的变量初始化为一个对象,如果初始化为一个对象,const定义的是这个对象的引用,接下来自己理解会发生什么,引用不能变更,但是对象里面的属性都可以变更;
参考:https://www.jianshu.com/p/4e9cd99ecbf5
工欲善其事 必先利其器