zoukankan      html  css  js  c++  java
  • 模仿块级作用域

    模仿块级作用域

    JavaScript中没有块级作用域,这意为着在块语句中定义的变量,实际上是包含在函数中而非语句中创建的。

    下面的这个实例可以看出:

    function outputNumbers(count){
        for (var i=0; i < count; i++){
            alert(i);
        }
    
        alert(i);   //count
    }
    
    outputNumbers(5);//0 1 2 3 4    5(for块语句外输出的)
    

    虽然没有块级作用域,但是可以通过匿名函数来模仿块级作用域

    用作块级作用域(通常称为私有作用域)的匿名函数语法如下表示:

    (function(){
        //这里是块级作用域
    })();
    

    以上代码定义并立即调用了一个匿名函数。将函数申明包含在一对圆括号中,表示它实际上是一个函数表达式。

    注意,下面这种写法会出错

    //错误写法
    function(){
        //这里是块级作用域
    }();
    

    如果一条语句是以function关键字开始,那么这段会被JavaScript解析器认为是函数定义。而函数定义是不能被立即执行的,因此就必须有一个办法,使解析器可以将之识别为函数表达式。因为解析器识别函数定义的条件是以function关键字开始,那么只要在function关键字的前面有任何其他的元素,就会从函数定义转变为函数表达式,所以当我们在其前面填括号就会变成函数表达式了。

    下面这种写法也可以:

    (function(){
        //这里是块级作用域
    }());
    

    现在让我们重新写开头的那个实例:

    function outputNumbers(count){
                
        (function () {
            for (var i=0; i < count; i++){
                alert(i);
            }
        })();
                    
        alert(i);   //ReferenceError: i is not defined,出现错误了
    
    outputNumbers(5);//0 1 2 3 4
    

    总结:无论在什么地方,只要临时需要使用变量,就可以使用私有作用域,通过创建私有作用域,每个人都可以使用自己的变量,又不用担心污染全局作用域。

  • 相关阅读:
    The builder launch configuration could not be found
    桌面上的图标不见了
    outlook软件后台运行
    c盘突然少了容量
    win7台式机睡眠时间修改
    系统占用的内存
    详细讲解 java 中的synchronized 转自 http://www.cnblogs.com/devinzhang/archive/2011/12/14/2287675.html
    The US ASCII Character Set 对应码 可以解决 URL中的特殊符号的传输问题
    oracle基本操作 转载
    内存中的 栈与堆
  • 原文地址:https://www.cnblogs.com/YeChing/p/6361497.html
Copyright © 2011-2022 走看看