let声明变量:
1、同一个作用域下不能声明同名的变量名
let count = 11;
let count = 12;//报错:Uncaught SyntaxError: Identifier 'count' has already been declared
2、不会把声明的变量放到window上:
let temp = 10;
console.log(temp);//10
console.log(window.temp);//undefind
3、在所在的块中会形成块级作用域
if for switch while .......
for(let i=0; i<4; i++){
console.log(i);//0 1 2 3
}
// 第一次做循环的时候会声明一个变量为i值为0
// 第二次会重新声明变量为i,i的值为上一次结果作为初始值,i为1
//依次类推...
4、不会提升变量
//只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。 称呼叫做暂存死区(TDZ)。
var声明变量:
1、在同一个作用域中可以声明同名的变量,但会污染变量
var index = 1;
console.log(index);//1
var index = 3;
console.log(index);//3
2、会把声明的变量字自动提升至window身上,作为window的属性
var num = 2;
console.log(num);//2
console.log(window.num);//2
3、var会提升变量
console.log(a);//undefined,var声明的变量会提升,只是未定义值,所以是undefined
console.log(b);//找不到变量名是引用错误ReferenceError
var a = 1;
let b = 2; //let声明的变量不会提升,在之前使用,就会报错
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。