391 Stimmen

Warum müssen Sie eine anonyme Funktion in der gleichen Zeile aufrufen?

Ich habe einige Beiträge über Verschlüsse gelesen und dies überall gesehen, aber es gibt keine klare Erklärung, wie es funktioniert - jedes Mal wurde mir nur gesagt, dass ich es benutzen soll...:

// Create a new anonymous function, to use as a wrapper
(function(){
    // The variable that would, normally, be global
    var msg = "Thanks for visiting!";

    // Binding a new function to a global object
    window.onunload = function(){
        // Which uses the 'hidden' variable
        alert( msg );
    };
// Close off the anonymous function and execute it
})();

Ok, ich sehe, dass wir eine neue anonyme Funktion erstellen und diese dann ausführen werden. Danach sollte dieser einfache Code also funktionieren (und das tut er auch):

(function (msg){alert(msg)})('SO');

Meine Frage ist: Welche Art von Magie geschieht hier? Das dachte ich, als ich schrieb:

(function (msg){alert(msg)})

dann würde eine neue unbenannte Funktion wie function ""(msg) ... erstellt werden.

aber warum funktioniert das dann nicht?

(function (msg){alert(msg)});
('SO');

Warum muss sie in der gleichen Zeile stehen?

Könnten Sie mir bitte einige Stellen nennen oder mir eine Erklärung geben?

3voto

Anoop Punkte 22416

Es gibt noch eine weitere Eigenschaft der JavaScript-Funktion. Wenn Sie dieselbe anonyme Funktion rekursiv aufrufen möchten.

(function forInternalOnly(){

  //you can use forInternalOnly to call this anonymous function
  /// forInternalOnly can be used inside function only, like
  var result = forInternalOnly();
})();

//this will not work
forInternalOnly();// no such a method exist

2voto

Ashwin Parmar Punkte 3000

Es handelt sich um eine selbstausführende anonyme Funktion. Der erste Satz von Klammern enthält die auszuführenden Ausdrücke, und der zweite Satz von Klammern führt diese Ausdrücke aus.

(function () {
    return ( 10 + 20 );
})();

Peter Michaux erörtert den Unterschied in Ein wichtiges Klammerpaar .

Es ist ein nützliches Konstrukt, wenn man versucht, Variablen aus dem übergeordneten Namespace auszublenden. Der gesamte Code innerhalb der Funktion ist im privaten Bereich der Funktion enthalten, was bedeutet, dass von außerhalb der Funktion nicht darauf zugegriffen werden kann, was sie wirklich privat macht.

Siehe:

  1. Schließung (Informatik)
  2. JavaScript-Namensaufteilung
  3. Wichtiges Paar Javascript-Klammern

1voto

Ronnie Royston Punkte 13643

Das IIFE gliedert die Funktion einfach auf und verbirgt die msg Variable, um den globalen Namensraum nicht zu "verschmutzen". In Wirklichkeit sollten Sie es einfach halten und wie unten beschrieben vorgehen, es sei denn, Sie bauen eine milliardenschwere Website.

var msg = "later dude";
window.onunload = function(msg){
  alert( msg );
};

Sie könnten Ihren Namespace msg Eigenschaft mit einer Modul-Muster aufdecken mögen:

var myScript = (function() {
    var pub = {};
    //myscript.msg
    pub.msg = "later dude";
    window.onunload = function(msg) {
        alert(msg);
    };
    //API
    return pub;
}());

1voto

Harikesh Yadav Punkte 61

Anonyme Funktionen sind Funktionen, die dynamisch deklariert werden bei Laufzeit deklariert werden. Sie werden anonyme Funktionen genannt, weil sie in Namen wie normale Funktionen erhalten.

Anonyme Funktionen werden stattdessen mit dem Funktionsoperator deklariert anstelle der Funktionsdeklaration deklariert. Sie können den Funktionsoperator verwenden, um können Sie überall dort eine neue Funktion erstellen, wo Sie einen Ausdruck einfügen können. Für können Sie beispielsweise eine neue Funktion als Parameter für einen Funktionsaufruf deklarieren Funktionsaufruf oder zur Zuweisung einer Eigenschaft eines anderen Objekts deklarieren.

Hier ist ein typisches Beispiel für eine benannte Funktion:

function flyToTheMoon() {
    alert("Zoom! Zoom! Zoom!"); 
}

flyToTheMoon(); 

Hier ist das gleiche Beispiel, das als anonyme Funktion erstellt wurde:

var flyToTheMoon = function() {
   alert("Zoom! Zoom! Zoom!"); 
}

flyToTheMoon();

Für Details lesen Sie bitte http://helephant.com/2008/08/23/javascript-anonymous-functions/

1voto

user2349539 Punkte 161
(function (msg){alert(msg)})
('SO');

Dies ist eine gängige Methode zur Verwendung einer anonymen Funktion als Abschluss, die viele JavaScript-Frameworks verwenden.

Diese Funktion wird automatisch aufgerufen, wenn der Code kompiliert wird.

Wenn Sie ; in der ersten Zeile, hat der Compiler sie als zwei verschiedene Zeilen behandelt. Sie können also nicht die gleichen Ergebnisse wie oben erzielen.

Dies kann auch so geschrieben werden:

(function (msg){alert(msg)}('SO'));

Weitere Einzelheiten finden Sie unter _JavaScript/Anonyme Funktionen_ .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X