for(let i = 0;i < 5;i++){
console.log(1);
}
console.log(i);//报错
let定义的变量有暂时性死区(绑定在当前代码块,不受外界影响), 在声明前使用定义的变量会报错
var tmp = 123;
if (true) {
tmp = 'abc'; // 报错
let tmp;
}
一些隐蔽的死区
function (x = y,y = 1){
..................
}
let x = x;
let在全局作用域定义的变量不会成为全局属性
var a = 1;
// 如果在 Node 的 REPL 环境,可以写成 global.a
// 或者采用通用方法,写成 this.a
window.a // 1
let b = 1;
window.b // undefined
块级作用域
ES5和ES6的区别
以下为阮一峰的案例
function f() { console.log('I am outside!'); }
(function () {
if (false) {
// 重复声明一次函数f
function f() { console.log('I am inside!'); }
}
f();
}());
ES5语法的实际执行后的代码
function f() { console.log('I am outside!'); }
(function () {
function f() { console.log('I am inside!'); }
if (false) {
}
f(); //I am inside!
}());
ES6的实际执行代码
function f() { console.log('I am outside!'); }
(function () {
var f = undefined
if (false) {
// 重复声明一次函数f
f = function() { console.log('I am inside!'); }
}
f();//报错
}());