Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 匿名函数的执行顺序_Javascript_Anonymous Function - Fatal编程技术网

Javascript 匿名函数的执行顺序

Javascript 匿名函数的执行顺序,javascript,anonymous-function,Javascript,Anonymous Function,打印9,8 为什么不是8点,9点 为什么不先执行匿名函数?请查看执行顺序的数字 基本上你有4个部分 具有提升功能的功能声明 调用函数的生命 f的新赋值 新函数的最后一次调用 (函数(){ f();//调用提升函数2 f=function(){//将新函数分配给f 3 控制台日志(8); } })() 函数f(){//已提升函数1 控制台日志(9) } f();//调用新函数4请查看执行顺序的编号 基本上你有4个部分 具有提升功能的功能声明 调用函数的生命 f的新赋值 新函数的最后一次调用 (

打印9,8

为什么不是8点,9点


为什么不先执行匿名函数?

请查看执行顺序的数字

基本上你有4个部分

  • 具有提升功能的功能声明

  • 调用函数的生命

  • f
    的新赋值

  • 新函数的最后一次调用

  • (函数(){
    f();//调用提升函数2
    f=function(){//将新函数分配给f 3
    控制台日志(8);
    }
    })()
    函数f(){//已提升函数1
    控制台日志(9)
    }
    
    f();//调用新函数4
    请查看执行顺序的编号

    基本上你有4个部分

  • 具有提升功能的功能声明

  • 调用函数的生命

  • f
    的新赋值

  • 新函数的最后一次调用

  • (函数(){
    f();//调用提升函数2
    f=function(){//将新函数分配给f 3
    控制台日志(8);
    }
    })()
    函数f(){//已提升函数1
    控制台日志(9)
    }
    
    f();//调用新函数4
    ,因为您在调用它之后定义了
    f()

    因此,它不会调用IIFE中定义的
    f()
    函数,而是调用outter f():

    通过颠倒顺序:

    (function() {
      f();
      f = function() {
        console.log(8);
      }
    })()
    
    function f() {
      console.log(9)
    }
    
    f();
    

    您可以将8和8作为输出,因为在这两种情况下,它都会调用重写的
    f()
    函数。

    因为您在调用它之后定义了
    f()

    因此,它不会调用IIFE中定义的
    f()
    函数,而是调用outter f():

    通过颠倒顺序:

    (function() {
      f();
      f = function() {
        console.log(8);
      }
    })()
    
    function f() {
      console.log(9)
    }
    
    f();
    

    您可以将8和8作为输出,因为在这两种情况下,它都会调用重写的
    f()
    函数。

    如果需要输出,您可以这样修改它

    (function () {
        f = function () {
            console.log(8);
        }
        f();
    })()
    
    但让我解释一下为什么它是这样执行的

    (function() {
      f();
      function f() {
        console.log(8);
      }
    })()
    
    function f() {
      console.log(9)
    }
    
    f();
    
    这是有区别的。行
    'b'
    是一个函数表达式。它只有在到达时才被定义。因此当它到达
    'a'
    时,我实际上并不知道“b”函数。相反,
    c
    是一个函数声明,当它遇到“f()”时,它立即知道。 在执行
    'a'
    之后(执行
    'c'
    ),它将被
    'b'
    修改为新的定义

    为了更清楚地考虑这个函数

    (function() {
      f(); // Line Number -a
      f = function() { //b
        console.log(8);
      }
    })()
    
    function f() { //c
      console.log(9)
    }
    
    f() //d
    
    您将得到的输出是它已定义。因为在该行
    a=10
    未执行之前,它没有值


    Philip Roberts编写的这段小代码实际上显示了代码的执行方式。请看一看

    如果需要输出,您可以这样修改它

    (function () {
        f = function () {
            console.log(8);
        }
        f();
    })()
    
    但让我解释一下为什么它是这样执行的

    (function() {
      f();
      function f() {
        console.log(8);
      }
    })()
    
    function f() {
      console.log(9)
    }
    
    f();
    
    这是有区别的。行
    'b'
    是一个函数表达式。它只有在到达时才被定义。因此当它到达
    'a'
    时,我实际上并不知道“b”函数。相反,
    c
    是一个函数声明,当它遇到“f()”时,它立即知道。 在执行
    'a'
    之后(执行
    'c'
    ),它将被
    'b'
    修改为新的定义

    为了更清楚地考虑这个函数

    (function() {
      f(); // Line Number -a
      f = function() { //b
        console.log(8);
      }
    })()
    
    function f() { //c
      console.log(9)
    }
    
    f() //d
    
    您将得到的输出是它已定义。因为在该行
    a=10
    未执行之前,它没有值


    这是Philip Roberts编写的一段小代码,它实际上显示了您的代码是如何执行的。请看一看

    谢谢,我现在就知道了:)谢谢,我现在就知道了:)