《JavaScript高级程序设计》读书笔记7.3模仿块级作用域

块级作用域通常称为私有作用域

  • 什么叫没有块级作用域概念?
    • 在块语句(if/while/do-while/for/switch)中定义的变量,实际上是在包含函数中而非语句中创建。函数内部可以随意使用它。
    • 函数内部多次声明(注意只是多次声明,没有初始化),只会对后续的声明视而不见
1
2
3
4
5
6
7
function outputNumbers(count){
for(var i=0;i<count;i++){
alert(i);
}
var i; //直接忽视
alert(i); //计数,返回count的值
}
  • 用作块级作用域(私有作用域)的匿名函数语法:
1
2
3
(function(){
//这里是块级作用域
})();

这种语法不好理解,那么解释演化如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var someFunction=function(){
//这里是块级作用域
};
someFunction();

可以简化如下:
function(){
//这里是块级作用域
}(); //出错!

出错原因:JavaScript会将 `function`关键字当作一个函数声明的开始,而函数声明后面不能跟圆括号。但函数表达式的后面可以跟圆括号。
解决办法:加一对圆括号,使函数声明转换为函数表达式。

(function(){
//这里是块级作用域
})();
  • 无论什么地方,只要临时需要一些变量,就可以使用私有作用域。 或者要加闭包时。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    function outputNumbers(count){
    (function(){
    for(var i=0;i<count;i++){
    alert(i);
    }
    })();

    alert(i); //导致一个错误,因为访问不到i
    }
  • 通常的用途:在全局作用域中被用在函数外部,从而限制向全局作用域中添加过多的变量和函数。或者加闭包时。

liborn wechat
欢迎您扫一扫上面的微信二维码,订阅我的公众号!