if(true){var a =10;let b =12;
console.log(a);// 10
console.log(b);// 12}
console.log(a);// 10
console.log(b);// 报错 ReferenceError: b is not defined
let定义的变量没有声明提升
console.log(a);// 因为有变量声明的提升所以会输出 undefined
console.log(b);// 报错 ReferenceError: Cannot access 'b' before initializationvar a =10;let b =10;
let定义的变量名不能重复
var a =10;var a =11;
console.log(a);let a =12;// 报错 SyntaxError: Identifier 'a' has already been declared
全局变量不会被注册到window上
var a =11;
console.log(a);// 11
console.log(window.a);// 11 var定义的全局变量会被注册到window身上
let a =10;
console.log(a);// 10
console.log(window.a);// undefined
额外说明: 有一些变量不要定义在全局中 window含有的属性
// 比如 top status name
var top =10;
console.log(top)// 输出的是window对象
let在for循环中 会每一个循环生成一个i
<ul><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li></ul><script>for(let i =0; i < lis.length; i++){
lis[i].onclick=function(){
console.log(i)}}</script>
ES6简介ES6主要的更新:块级作用域、新的关键字、新的类、新的数据类型、新的数据结构、新的异步代码解决方案、新的方法...关键字let 关键字特点块级作用域:if语句和for语句之类的大括号会隔离作用域let定义的变量遵循块级作用域if (true) { var a = 10; let b = 12; console.log(a); // 10 ...