来看看这段代码

            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. 在上述情况下调用非匿名函数,会一起执行.

相关文章:

  • 2021-09-29
  • 2021-10-23
  • 2021-05-27
  • 2021-05-20
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-11-29
  • 2021-12-11
  • 2022-01-31
  • 2021-09-17
  • 2021-07-29
相关资源
相似解决方案