zoukankan      html  css  js  c++  java
  • js:深闭包(范围:上)

    /**
     * 范围封锁
     */
    fn1(); //fn1 您可以运行,没有报错,对于由function func_name()这样的写法来定义的函数,永远都会被最先初始化。
    function fn1(){
      console.log("fn1");
    }

    fn2(); //报错:fn2 is not a function
    /**
     *使用例如以下方式定义函数,不会被先运行,假设在定义之前调用。报错。
     *这样的函数的定义方式是先在内存中创建一块区域,之后通过一个fn2的变量指向这块区域。
     *这块区域的函数開始时是没有名称的。这样的函数名称叫做匿名函数。


     */
    var fn2 = function(){
      console.log("fn2"); 
    }
    ----------------------------------函数作用域--------------------------------------
    /**
     * 在js中当进行函数调用时,会为每个函数添加一个属性scope,通过这个属性来指向一块内存。
     * 这块内存中包括有全部的上下文使用的变量,当在某个函数中调用了新函数之后。新函数依旧会有
     * 一个作用域来指向原有的函数的scope和自己新添加的scope,这样就形成了一个链式结构,
     * 这就是js中的作用域链。
     */
    var color = "red";

    var showColor = function(){
      console.log(this.color); 
    }

    function changeColor(){
      var anotherColor = "blue";
      function swapColor(){
        var tempColor = anotherColor;
        anotherColor = color;
        color = tempColor;
      }   
      swapColor();
    }

    changeColor();
    showColor(); //blue
    运行步骤:

    释放swapColor

    释放changeColor            

    运行showColor

    --------------------------------------------------------------------------

    var name = "one";
    var object = {
      name:"two",
      getName:function(){
         //var name = "three";
        return function(){
          return this.name;
          //return name;
        };
      }
    };

    console.log(object.getName()()); //one

    想想问什么?若是在getName函数里再加个 var name = "three" 呢?若把匿名函数里的 return this.name; 改为 return name; 呢?

    返回值是什么,为什么?

    假设你能理解上面代码的执行结果,应该就算理解闭包的执行机制了。
    /**
     * 使用闭包尽管能够演唱作用域,可是也会占用过多的内存,一般非特殊情况下不要使用闭包。
     *
     */

     

    原创文章如转载。请注明出处,本文首发于csdn站点:http://blog.csdn.net/magneto7/article/details/25166845

  • 相关阅读:
    《A First Course in Mathematical Modeling》-chaper1-差分方程建模
    《数学竞赛辅导》-一元函数积分学-7.24
    《University Calculus》-chape4-导数的应用-极值点的二阶导数检验法
    《A First Course in Probability》-chaper1-组合分析-方程整数解的个数
    《训练指南》——7.24
    《数学竞赛辅导》-一元函数微分学-7.23
    《University Calculus》-chape4-导数的应用-微分中值定理
    《训练指南》——7.21
    #424 Div2 E
    #424 Div2 C
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5018453.html
Copyright © 2011-2022 走看看