let 和 var的区别 答:不同点在于作用域
1.(全局下)首先 let关键字声明的变量是这样写会导致错误。
let声明的变量类似于”本地变量“,函数内如何不重新声明,还是会被改变
var a =10;
var a ="10a";
let b =20;
let b ="20b";
console.log(a);//10a
console.log(b);//报错 Identifier 'b' has already been declared
2.(方法内)var关键词的作用域是最近的函数作用域(如果在函数体的外部就是全局作用域);
var snack = 'Meow Mix';
function getFood(food) {
if (food) {
var snack = 'Friskies';
return snack;
}
return snack;
}
getFood(false); // undefined
//在函数中,用var声明的变量,会在整个函数作业域中,return时优先查找最近的函数作用域。
2-2 .let 关键词的作用域是最接近的块作用域(如果在任何块以外就是全局作用域),这将会比函数作用域更小。说明let声明的变量只是块级作用域
ps:getFood(true),并且没有在函数内声明,let声明的变量会改变
let snack = 'a';
function getFood(food) {
if (food) {
let snack = 'b';
return snack;
}
return snack;
}
console.log(getFood(false));//a
console.log(snack);//a
//这里return的还是全局变量
3.(循环中)
块(Block)
这是不同点, let 只是在 for 循环中, var 却是在整个函数都是可见的。
//let声明
let i = "aaa";
function odd(){
for(let i=0;i<10;i++){
console.log(i);//1,2,3,4,5,6,7,8,9
}
return i;
}
console.log(odd());//aaa
console.log(i);//aaa
//var 声明
var i = "aaa";
function odd(){
for(var i=0;i<10;i++){
console.log(i);//1,2,3,4,5,6,7,8,9
}
return i;
}
console.log(odd());//
console.log(i);//aaa
原文地址:http://blog.csdn.net/lcstrive/article/details/43149167
欢迎指出问题~~