你的位置:首页 > Java教程

[Java教程]ES6笔记① var 和 let的区别

let 和 var的区别    答:不同点在于作用域

1.(全局下)首先  let关键字声明的变量是这样写会导致错误。

  let声明的变量类似于”本地变量“,函数内如何不重新声明,还是会被改变

var a =10;var a ="10a";let b =20;let b ="20b";console.log(a);//10aconsole.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

 欢迎指出问题~~