今天带来的是 “对《你不知道的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创建的块作用域)