let与var区别
var是ES5标准中声明变量的方式,而let是ES6标准中新增的声明变量的方式。
var声明的变量是函数作用域或全局作用域,而let声明的变量是块级作用域。
var声明的变量在变量声明之前就可以使用,而let声明的变量只有在变量声明之后才能使用。
全局作用域
var 和 let 声明的变量在全局作用域中被定义时,两者非常相似let bar = 'let的';
var baz = 'var的';
但是,被let声明的变量不会作为全局对象window的属性,而被var声明的变量却可以console.log(window.bar); //undefined
console.log(window.baz); // 'able'
函数作用域
var 和 let 在函数作用域中声明一个变量,两个变量的意义是相同的。
function aFun(){
let bar = 'let的'; // 函数作用域中的变量
var baz = 'var的'; // 函数作用域中的变量
}
块作用域
在块作用域中两者的区别较为明显, let只在for()循环中可用,而 var是对于包围for循环的整个函数可用
function aFun1(){
// i 对于for循环外的范围是不可见的(i is not defined)
for(let i = 1; i<5; i++){
// i只有在这里是可见的
}
// i 对于for循环外的范围是不可见的(i is not defined)
}
function aFun2(){
// i 对于for循环外的范围是可见的
for(var i = 1;i<5; i++){
// i 在for 在整个函数体内都是可见的
}
// i 对于for循环外的范围是可见的
}
let 和var 重新声明
var允许在同一作用域中声明同名的变量,而let不可以let me = 'foo';
let me = 'bar'; //SyntaxError: Identifier 'me' has already been declared