var, let ,const区别

ES6中加入了let,const字符,先说说新的区别:

作用域:let 声明的变量只在它所在的代码块内有效,而且不存在变量提升,即变量可以在声明之前使用,值为undefined。let未声明变量前会报错。

如果区块内存在let和const命令,这个代码块对这些命令声明的变量从一开始就形成了封闭作用域。在声明前调用是会报错的。

let 不允许重复声明同一个变量,否则报错。

1,(块级作用域)为什么需要块级作用域?
ES5只有全局作用域和函数作用域,没有块级作用域。
场景一:内层变量会覆盖外层变量

var tmp = new Date();

function f() {
  console.log(tmp);
  if (false) {
    var tmp = 'hello world';
  }
}

f();

场景二:循环变量会泄漏为全局变量

var s = 'hello';

for (var i = 0; i < s.length; i++) {
  console.log(s[i]);
}

console.log(i); // 5

let实际上为JavaScript新增了块级作用域,从而外层作用域无法读取内层作用域的变量。

在内层作用域中可以定义外层作用域同名变量,不会覆盖外层变量。

以前的立即执行函数可以直接用{}包起来。

 

const声明一个只读常量,一旦声明,就必须立即初始化,而且值不能改变。

如果只声明不赋值就会报错,作用域与let相同。

 

ES6中声明变量的方法有6种:var ,function,let,const,还有import和class

 

posted @ 2018-05-04 16:16  tangjiao_Miya  阅读(258)  评论(0编辑  收藏  举报