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));

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值