suchen

Heim  >  Fragen und Antworten  >  Hauptteil

javascript - Ich möchte Ihnen eine Frage zur Funktionsförderung in JS stellen?

Der folgende Code:

function a() {
    console.log('1')
}    

(function() {
    console.log(a);
    if(1) {
        function a() {
            console.log('2');
        }
    }
})()

Nach dem Ausführen ist die Ausgabe undefiniert.

Nach dem Entfernen der if-Bedingung ist die Ausgabe die zweite a-Funktion

function a() {
    console.log('1')
}    

(function() {
    console.log(a);

    // if(1) {
        function a() {
            console.log(2);
        }
    // }
})()

Da ich weiß, dass die Funktion verbessert wurde, wird im zweiten Teil des Codes eine Funktion vor dem Code console.log(a) heraufgestuft, sodass im zweiten Teil eine Funktion ausgeführt und ausgegeben wird.
Aber im ersten Teil des Codes verstehe ich nicht, warum undefiniert ausgegeben wird.

代言代言2754 Tage vor637

Antworte allen(3)Ich werde antworten

  • 代言

    代言2017-06-12 09:32:06

    条件式函数声明跟函数表达式的处理方式一样。因此,条件式函数声明丧失了函数声明提升的特性。

    参考网址:/q/10...

    Antwort
    0
  • 怪我咯

    怪我咯2017-06-12 09:32:06

    在 if else 语句中使用 function 关键字进行函数声明时,变量的提升在不同浏览器中是不一样的。只是这里刚好是提升了个变量的声明,去掉了 if else 就成了单纯的函数作用域。

    function a() {
        console.log('1')
    }    
    
    (function() {
        var a;
        console.log(a);
        if(1) {
            a = function a() {
                console.log('2');
            }
        }
    })()

    Antwort
    0
  • 学习ing

    学习ing2017-06-12 09:32:06

    你的IIFE中的

     if(1) {
      a = function a() {
        console.log('2')
      }
    } 

    是个函数表达式,而不是函数声明,当 去掉if的时候是函数声明,没有去掉if ,conosle.log(a),a表示未定义的变量a,参考https://developer.mozilla.org...

    Antwort
    0
  • StornierenAntwort