2016-03-29 4 views
0

-Ist es eine richtige Art und Weise .call() zu verwenden, um eine Funktion sofort nach Erklärung zu nennen, anstatt die Syntax mit Pars wie: Anstelle der Verwendung von:Ist es richtig, .call() zu verwenden, um eine Funktion sofort aufzurufen?

(function([params]){ 
    //Code goes here 
})(/*params*/); 

Können wir dies tun ?:

Ich lese in einem Blog oder einer Seite, die mit .call() verwendet werden kann, um Funktionen anonym aufrufen, so dass ich davon ausgehe, dass es richtig ist, es zu tun. Aber ich bin mir nicht sicher, welcher Weg der 2 besser ist. Ich sehe es könnte einfacher sein, die erste Methode zu verwenden.

Kann ich auch sofort Funktionen aufrufen, um innerhalb eines Literalobjekts oder eines Funktionskonstruktors eine Variable innerhalb dieses Objekts zu erstellen, deren Wert berechnet wird, indem eine Art von Algorithmen innerhalb einer sofort selbstausgeführten Funktion ausgeführt wird? IE: Das Beispiel ist sehr stupidi Beispiel, aber ... Sorry für das dumme Beispiel könnte ich glaube nicht an etwas besser:

function Person(name, sex){ 
    this.name = name; 
    this.sex = sex; 
    this.description = (function(){ 
     let desc = ""; 
     let gender = ""; 
     if (sex == "male"){ 
      gender = "male"; 
     } 
     else if (sex == "female"){ 
      gender = "woman"; 
     } 
     desc += "I am a "+gender+" and my name is "+name; 
     return desc; 
    })(name, sex); 
} 

var p1 = new Person("Alice", "female"); 
alert(p1.description); 

ich es getestet und es funktioniert, so nehme ich an komplexere Dinge sein könnten getan und Variablen privat. Habe ich recht? Ich wäre dankbar, wenn Sie meine Zweifel darüber lösen könnten.

+4

Der Grund, '.call()' zu verwenden, anstatt nur die Funktion aufzurufen, ist, dass Sie 'this' benötigen, um an einen bestimmten Wert gebunden zu werden. Wenn Sie das nicht brauchen, gibt es keinen Grund, '.call()' zu verwenden (aber es tut nichts weh). – Pointy

Antwort

1

Es besteht keine Notwendigkeit .call oder .apply auf einer IIFE Funktion zu verwenden, wenn es keine Verwendung des Kontextes this ist es innerhalb wie das ist, was call für Sie tut.

Der einzige Grund, warum ich die Notwendigkeit dafür sehen kann, ist vielleicht in einer Callback-Funktion, wo Sie den Kontext binden müssen, um this entsprechend im Rückruf zu verwenden.

+0

Ok, danke. Was Sie sagen, klingt logisch. – Lorthas

+0

Sie sind herzlich willkommen @Lorthas. Wenn es dir geholfen hat, kannst du eine Antwort akzeptieren :-) – Neal

Verwandte Themen