var声明
var varname= 10;
变量值可以没有,即 var varname,那么varname默认就是undefined;
var 作用域的理解:js作用域的理解
let声明
ES6 新增了 let 命令,用来声明变量。它的用法类似于 var,但是所声明的变量,只在 let 命令所在的代码块内有效。
1. 变量名不能重复
- let 声明的变量,变量名不能重复! 而且必须先声明后使用。
1 var a = 0; 2 let a = 1; // 报错 --- 标识符 'a' 已经声明 3 console.log(a);
VM1019:2 Uncaught SyntaxError: Identifier 'a' has already been declared
2. 块级作用域
- 块级作用域,相当于局部作用域。在JS中,只有函数才能创造一个局部作用域,但是在ES6中,只要是个 { } 都是块级作用域(局部作用域)。
// 对象: { var a = 1; let b = 2; } console.log(a); // a = 1 console.log(b); // 报错 --- b is not defined
3. let 声明的变量只能在当前作用域使用
- js5 中 用 var 在 for 中声明的变量,可以再外部访问。
- es6中 用 let 在 for 中声明的变量 ,无法在外部访问。
- 在 js 中,全局变量可以在局部环境下使用,局部变量不能在全局下使用。
- 在 es6 中,let 声明的变量,全局变量只能在全局使用,局部变量只能在局部使用。而且全局声明的变量与局部声明的变量没有任何关系, 变量名都可以一样。
// 在 js 中函数创造局部环境 for (var i = 0; i < 10; i++) { var a = i; } console.log(i); // 10 console.log(a); // 9
// es6 中 用 let 在 for 中声明的变量 ,无法在外部访问。 for (let i = 0; i < 10; i++) { let a = i; } console.log(i); // i is not defined console.log(a); // 没执行到
4.暂时性死区
在代码块内,使用 let 命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”
{ console.log(a); //undefined。 var a = 1; // 局部作用域 console.log(a);//1 }
let 声明的变量 ,必须先声明再使用,否则报错;
{ console.log(a); // 报错 --- 在初始化之前无法访问'a' 应该先声明后使用。 let a = 1; // 局部作用域 console.log(a); }
const关键字
- 在ES6中用来声明静态常量。
- 常量在声明时,所有字母必须大写, 必须赋值。
- 一旦声明,常量的值就不能改变。
const PI = 3.1415926; console.log(PI); PI = 0; console.log(PI); // 报错 --- 常量无法修改, 对常数变量的赋值。 const ABC; console.log(ABC); // 报错 --- 在const声明中缺少初始化
参考原文地址:https://www.jianshu.com/p/fd427a0c2c23