1.let和var
<1>let声明的变量仅在块级作用域内有效;
var声明的变量在全局有效;
<2> var变量乐意在声明之前使用,输出undefined;
let 不可以,直接抛出一个错误;
例如://var 声明 console.log(a); //undefinedvar a = 55;//let 声明 console.log(b); //报错ReferenceError let b = 67;
注:for循环的循环变量的那部分是一个父级作用域,而循环体内部是一个单独的子作用域。
ES6 明确规定,如果区块中存在let
和const
命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。
<3>let
不允许在相同作用域内,重复声明同一个变量。
例如:
function func(){ // 报错var a;let a;}function func(arg) {let arg; // 报错 }
2.const
const
声明一个只读的常量。一旦声明,常量的值就不能改变。
const
的作用域与let
命令相同:只在声明所在的块级作用域内有效。