function checkHoisting() { console.log(foo); // ReferenceError let foo = "Foo"; console.log(foo); // Foo}checkHoisting(); ! h7 e* c# E! h
创建全局对象属性在顶层let,与 不同var,属性不会在全局对象上创建:2 O& q. N; M/ G) L, b" S
var foo = "Foo"; // globally scopedlet bar = "Bar"; // not allowed to be globally scopedconsole.log(window.foo); // Fooconsole.log(window.bar); // undefined 4 L/ c5 A6 l; j$ U3 C5 i6 h
Redeclaration在严格的模式下,var同时,它将允许您在同一范围内重新声明相同的变量let引发 SyntaxError。 u. B% E# G& G* L/ a
'use strict';var foo = "foo1";var foo = "foo2"; // No problem,'foo1' is replaced with 'foo2'.let bar = "bar1"; let bar = "bar2"; // SyntaxError: Identifier 'bar' has already been declared : Z; W, k {; D3 i' u* g