Js作用域理解

    <script type="text/javascript">
    /**
     * 在js中当进行函数的调用,会为每一个函数增加一个属性SCOPE,通过这个属性来指向一块内存
     * 这块内存中包含有所有的上下文使用的变量,当在某个函数中调用了新函数之后,新函数依然
     * 会有一个作用域来执行原有的函数的SCOPE和自己新增加的SCOPE,这样就形成一个链式结构
     * 这就是js中的作用域链
     */
    var color = "red";
    
    var showColor = function() {
        alert(this.color);
    }
    
    function changeColor() {
        var anotherColor = "blue";
        function swapColor() {
            var tempColor = anotherColor;
            anotherColor = color;
            color = tempColor;
        }
        swapColor();
    }
  
    changeColor(); 

    showColor();
    </script>

  如何理解: 

         changeColor() 函数可以访问作用域:   global scope   changeColor scope自己作用域

         swapColor() 函数可以访问作用域:   global scope   changeColor scope外层函数、和swapColor scope作用域  

        *** 如何某一个变量在当前函数中没有,那么会去上一层函数中找变量

=========================================================================================

        var fn2= function(){ 

                 var name="xiaoing"
                  alert("f2");
                }

          // 如何理解,在内存中创建一块区域,然后通过f2这个变量指向这块内存区域, 这块区域的函数开始是没有名称的

         ,这种函数可以叫做匿名函数

            /**
             *  1.Js中闭包:
             *  执行compareObjectFunction 函数以后,理论上形参 prop 里面的函数 在栈中  都会被内存释放
             *  但是 返回匿名函数,作用域扩大,内存不会被释放
             *  通过返回函数来扩大作用域的方法就是闭包
             */
            function compareObjectFunction(prop){
                // 这个就是匿名函数,return 返回的
                return function(obj1,obj2){
                    if(obj1[prop]>obj2[prop]){
                        return 1;
                    }else if(obj1[prop] == obj2[prop]){
                        return 0;
                    }else {
                        return -1;
                    }
                }
            }
          var o1={name:"any",age:34};
          var o2={name:"tony",age:1};
          var compare= compareObjectFunction("name");
          console.info("闭包结果是:",compare(o1,o2));

发布了141 篇原创文章 · 获赞 51 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/dreams_deng/article/details/102148012
今日推荐