函数作用域和块级作用域 --《你不知道JS》

1.函数作用域

  1.函数作用域的含是指,属于个函数的全部量都可以在整个函数的范内使用及复用(事实上在嵌套的作用域中也可以使用) 。

  2.避免函数变量冲突,作用域中的量和函数所来的一个好,是可以避免同名标识符之的冲突; 

  3.可通过立即执行函数和匿名函数等解决变量冲突问题;

2.块作用域

  在表面上看JavaScript没有块级作用域,但深入研究有些可以看作是块级作用域。

  1.with()

    with象中建出的作用域with声明中而非外部作用域中有效 .

  2.try/catch

    ECMA3规范中规定try/catch的catch分句会创建一个块级作用域,其声明的变量仅在catch分句中有效;

try {
    undefined(); // 执行一个非法操作来强制制造一个异常
}
catch (err) {
    console.log( err ); // 能够正常执行!
} 
console.log( err ); // ReferenceError: err not found

3.let

  ECMA6引入了let,提供除了var以外的另一种变量声明方式。let字可以将定到所在的任意作用域中(通常是{ .. }内部)。话说let可以声明块级变量。 在for 循环中应用广泛

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

  注意:但是使用let行的声明不会在作用域中行提升。声明的代行之前,声明并不存在

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

 

  其非常有用的原因和垃圾回收机制有关,引擎可以清楚地知道要不要回收变量。

4.const

  ES6引入了const,同可以用来作用域量,但其是固定的(常量)。之后任何试图修改的操作都会引起错误 

 

posted @ 2017-10-19 20:33  im.lhc  阅读(488)  评论(0编辑  收藏  举报