今天帶來的是 “對《你不知道的js》中塊級作用域的總結” 分享:
1)用with從對象中創建出來的作用域只在with聲明中而非外部作用域有效,同時可以訪問已有對象的屬性並將其添加到已有對象上
代碼demo:
var obj = { a:1, b:2, c:3 }; with(obj){ a=3; b=4; c=5;
d=6; } console.log(obj);//3,4,5
2)try/catch 的catch分句會創建一個塊級作用域,其中聲明的變量僅在catch內部有效
代碼demo:
try{ undefined();//執行一個非法操作來強制制造一個異常 } catch(err){ console.log(err);//能夠正常執行 } console.log(err);//ReferenceError:err is not defined
3)let用法:可以將變量綁定到所在的任意作用域中(通常是{...}內部)
代碼demo:
for(i = 1; i < 5; i++){ console.log(i);//1 2 3 4 } console.log(i);//5 for(let j = 1; j < 5; j++){ console.log(j);//1 2 3 4 } console.log(j);//ReferenceError: j is not defined
由於let創建的是塊級作用域,所以外部無法訪問到let聲明的變量
4)const:可以用來創建塊作用域變量; 其值是固定的(常量),之后任何試圖修改值的操作都會引起錯誤
代碼demo:
var foo = true; if(foo){ var a = 2; const b = 3;//包含在if中的塊作用域常量 a = 3;//正常 //b = 4;//錯誤 //console.log(b);//TypeError: invalid assignment to const `b'(這里說明其值為常量,之后不能更改其值) } console.log(a);//3
console.log(b);//ReferenceError!(這個異常可以證明const創建的塊作用域)