ES6笔记① var 和 let的区别

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());//10 console.log(i);//aaa

原文地址:http://blog.csdn.net/lcstrive/article/details/43149167

 欢迎指出问题~~

posted @ 2016-08-04 17:28  鹿兔牛马羊  阅读(362)  评论(0编辑  收藏  举报