块作用域

来源:互联网 发布:wine for mac 编辑:程序博客网 时间:2024/06/03 21:32

表面上看javascript并没有块作用域的相关功能。
一般来说for循环和if语句中定义的变量会被绑定在外部作用域。

with关键字:用with从对象中创建出的作用域仅在with声明中而非外部作用域中有效。
try/catch的catch分句会创建一个块作用域,其中声明的变量仅在catch内部有效。

let关键字:可以将变量绑定到所在的任意作用域中,通常是{..}内部。换句话说,let为其声明的变量隐式的劫持了所在的块作用域。

var foo=true;if(foo){    let bar=foo*2;    bar=something(bar);    console.log(bar);}console.log(bar);//ReferenceError

用let进行的声明不会在块作用域中进行提升。

{    console.log(bar);//ReferenceError    let bar=2;}{    console.log(bar);//undefined    var bar=2;}

除了let外,还有const,同样可以用来创建块作用域变量,但其值是固定的。之后任何试图修改值得操作都会引起错误。

var foo=true;if(foo){    var a=2;    const b=3;//包含在if中的块作用域常量    a=3;//正常    b=4;//错误}console.log(a);//3console.log(b);//ReferenceError