标签:strong 开始 abc 代码 cti 不能 enc initial function
let
声明了一个块级域的局部变量const
声明一个块级域的只读的常量console.log(a); // undefined console.log(b); // Uncaught ReferenceError: b is not defined(…) var a = 1; let b = 2; // 或 const b = 2;
let
const
命令声明变量之前,该变量都是不可用的。这在语法上,称为暂时性死区(temporal dead zone,简称TDZ)。
if (true) { // TDZ开始 tmp = ‘abc‘; // ReferenceError console.log(tmp); // ReferenceError let tmp; // TDZ结束 console.log(tmp); // undefined tmp = 123; console.log(tmp); // 123 }
ES6规定暂时性死区和 let
、const
语句不出现变量提升,主要是为了减少运行时错误,防止在变量声明前就使用这个变量,从而导致意料之外的行为。
同一作用域内,不允许重复声明
{ let a = 1; var a = 2; // Uncaught SyntaxError: Identifier ‘a‘ has already been declared } // test 2 { const b = "const"; let b; // // Uncaught SyntaxError: Identifier ‘b‘ has already been declared }
let
、const
声明的全局变量,不属于顶层对象的属性。var a = 1; let b = 2; const c = 3; console.log(window.a); // 1 console.log(window.b); // undefined console.log(window.c); // undefined
块级作用域:
ES6 引入了块级作用域,ES6 规定,允许在块级作用域之中声明函数,考虑到环境导致的行为差异太大,应该避免在块级作用域内声明函数。如果确实需要,也应该写成函数表达式,而不是函数声明语句。
const:
const 声明的常量不能对其进行赋值,否则报错
const PI = 3.1415926; PI = 3.14; // Uncaught TypeError: Assignment to constant variable.(…)
const a; // Uncaught SyntaxError: Missing initializer in const declaration
const obj = {}; console.log(obj); // Object {} obj.name = "percy"; console.log(obj); // Object {name: "percy"} obj = {}; // 报错,Uncaught TypeError: Assignment to constant variable.(…) // 清除上面的错误,继续上面的代码 Object.freeze(obj); // 冻结 obj obj.age = "21"; // 默认忽略更改,严格模式下报错 console.log(obj); // Object {name: "percy"}
标签:strong 开始 abc 代码 cti 不能 enc initial function
原文地址:http://www.cnblogs.com/minna123/p/7220914.html