闭包中匿名函数什么时候调用?

来看看这段代码

            var n = 0;
            function move(x) {
                return function () {
                    n = x;
                }
            }
            move(30);
            alert(n);

猜一下这个窗口会弹出多少? 是30 还是0?

答案是 0

为什么是这样呢, 让我们修改一下代码就明白了.

    var n=0;
    function move(x) {
        return function () {
            n=x;

        }
    }
    alert(move(30))

这个时候函数没有立刻运行.因为闭包返回的函数不会立刻调用.而是当你调用的时候才会调用. 所以返回了一个没有运行的函数体

          var n=0;
          function move(x) {
              return function () {
                  n=x;
              }
          }
          result=move(30)();
          alert(n);
  • 当这个时候弹出的值就是
  • 因为这个时候move()() 真正调用了内部的匿名函数.

总结来说,闭包中的匿名函数,如果没有调用.只会返回一个函数体.

但是只针对闭包中的匿名函数,如果是一个普通的函数.会直接运行,如下代码


        function cons() {
            console.log("I am function 2")
        }
        function move2() {
           console.log( "I am function 1")
            return cons()
        }
        move2();

会在控制台输出 I am function 1 和I am function 2. 在上述情况下调用非匿名函数,会一起执行.

posted @ 2017-03-07 22:49  MaxProAim  阅读(731)  评论(3编辑  收藏  举报