520 Stimmen

Was ist der Zweck einer selbstausführenden Funktion in Javascript?

In javascript, wann würden Sie dies verwenden möchten:

(function(){
    //Bunch of code...
})();

darüber:

//Bunch of code...

1voto

zentechinc Punkte 330

Angesichts Ihrer einfachen Frage: "Wann würden Sie in Javascript folgendes verwenden wollen:..."

Ich mag die Antworten von @ken_browning und @sean_holding, aber hier ist ein weiterer Anwendungsfall, den ich nicht erwähnt sehe:

let red_tree = new Node(10);

(async function () {
    for (let i = 0; i < 1000; i++) {
        await red_tree.insert(i);
    }
})();

console.log('----->red_tree.printInOrder():', red_tree.printInOrder());

wobei Node.insert eine asynchrone Aktion ist.

Ich kann nicht einfach await ohne das async-Schlüsselwort bei der Deklaration meiner Funktion aufrufen, und ich brauche keine benannte Funktion für die spätere Verwendung, sondern muss diesen Einfügeaufruf abwarten, oder ich brauche einige andere reichere Funktionen (wer weiß?).

1voto

Madhankumar Punkte 360
(function(){
    var foo = {
        name: 'bob'
    };
    console.log(foo.name); // bob
})();
console.log(foo.name); // Reference error

Eigentlich wird die obige Funktion als Funktionsausdruck ohne Namen behandelt.

Der Hauptzweck der Umhüllung einer Funktion mit schließenden und öffnenden Klammern besteht darin, die Verschmutzung des globalen Raums zu vermeiden.

Die Variablen und Funktionen innerhalb des Funktionsausdrucks werden privat (d.h. sie sind außerhalb der Funktion nicht verfügbar).

1voto

James Curran Punkte 98228

Da Funktionen in Javascript sind First-Class-Objekt, durch die Definition es so, es effektiv definiert eine "Klasse" ähnlich wie C + + oder C #.

Diese Funktion kann lokale Variablen definieren und Funktionen innerhalb der Funktion haben. Die internen Funktionen (effektiv Instanzmethoden) haben Zugriff auf die lokalen Variablen (effektiv Instanzvariablen), sind aber vom Rest des Skripts isoliert.

0voto

Garrett Punkte 21

Es sieht so aus, als wäre diese Frage bereits beantwortet worden, aber ich werde mich trotzdem dazu äußern.

Ich weiß, wann ich selbstausführende Funktionen verwenden möchte.

var myObject = {
    childObject: new function(){
        // bunch of code
    },
    objVar1: <value>,
    objVar2: <value>
}

Die Funktion ermöglicht es mir, einige zusätzliche Code zu verwenden, um die childObjects Attribute und Eigenschaften für sauberen Code zu definieren, wie z. B. häufig verwendete Variablen oder mathematische Gleichungen ausführen; Oh! oder Fehlerprüfung. im Gegensatz zu verschachtelten Objekt Instanziierung Syntax der...

object: {
    childObject: {
        childObject: {<value>, <value>, <value>}
    }, 
    objVar1: <value>,
    objVar2: <value>
}

Bei der Programmierung im Allgemeinen gibt es viele obskure Möglichkeiten, viele der gleichen Dinge zu tun, so dass man sich fragt: "Wozu die Mühe?" Aber es tauchen immer wieder neue Situationen auf, in denen man sich nicht mehr allein auf die Grund-/Kernprinzipien verlassen kann.

-4voto

Ólafur Waage Punkte 66497

IIRC erlaubt es Ihnen, private Eigenschaften und Methoden zu erstellen.

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