ES6之前Javascript沒有塊級作用域。在{}中定義的變量汪诉,它的作用域范圍是包含它的函數(shù)或者腳本返劲。也就是說塞淹,沒有塊級作用域窟蓝。
let語句定義了塊級作用域罪裹。let使得能夠在塊級作用域內(nèi)聲明變量饱普,只能在定義它的作用域范圍內(nèi)使用。
var聲明的變量具有函數(shù)作用域状共。
let重定義變量將報錯:
在ES6中套耕,let定義的變量也會提升,然而峡继,如果在定義變量之前引用了變量冯袍,將得到ReferenceError.
function do_something() { console.log(foo); let foo = 2; } do_something(); /* Exception: ReferenceError: can't access lexical declaration 'foo' before initialization do_something@Scratchpad/1:12:3 @Scratchpad/1:16:1 */
在switch語句中,let定義也不能重名:
switch (x) { case 0: let foo; break; case 1: let foo; // TypeError for redeclaration. break; } /* Exception: TypeError: redeclaration of let foo @Scratchpad/1:16 */
let vs var##
var a = 5; var b = 10; if (a === 5) { let a = 4; var b = 1; console.log(a); // 4 console.log(b); // 1 } console.log(a); // 5 console.log(b); // 1
let綁定變量在局部作用域中
for (let i = 0; i < 10; i++) { console.log(i); } console.log(i); /* Exception: ReferenceError: i is not defined @Scratchpad/1:13:1 */
控制語句##
如果你需要賦值表達(dá)式作為條件表達(dá)式可以寫成下面這種形式(加括號):
if ((x = y)) { /* statements here */ }
falsy值###
false碾牌、undefined康愤、null、0舶吗、NaN征冷、""在布爾運算中為false
本文整理自:
MDN