2016-04-20 6 views
2

Sagen, zum Beispiel, ich muss ein onclick Ereignis, das eine andere Funktion ruft sayHello() Hallo sagen, mit seinem Parameter als eine Variable im aktuellen Bereich verfügbar.IIFE vs Bind() für Ereignis/Callback-Funktion

ich IIFE verwenden könnte die Variable in den Rahmen der anonymen Funktion zu injizieren, wie folgt:

var currentName = "James"; 

something.onclick = (function(name) { 
    return function() { 
     sayHello(name); 
    }; 
})(currentName); 

Aber ich könnte auch eine Version von Funktion currying über die bind() Methode wie folgt:

var currentName = "James"; 
something.onclick = sayHello.bind(null, currentName); 

Trotz der Tatsache, dass Sie mit dem IIFE-Ansatz mehr als nur einen Funktionsaufruf in der anonymen Methode ausführen können, gibt es irgendwelche Nachteile für den Curry-Ansatz?

+0

Sie übergeben den Ereignisparameter nicht an 'sayHello', und es ist wesentlich länger. – Bergi

+0

Sie können als Antwort senden, @Bergi, und ich werde als die akzeptierte Antwort markieren. – Dan

Antwort

2

Funktion currying über die bind() Methode

Es partial application actually ist.

Gibt es Nachteile beim Austauschen des IIFE für bind?

Der Unterschied zwischen Ansätzen ist, dass bind stattdessen weitere Parameter durchläuft nur sayHello mit name aufrufen. In diesem Fall wird das Ereignisargument an den Handler übergeben und nicht ignoriert. Natürlich kann dies behoben werden (mit dem arguments Objekt oder ES6 Rest + Spread), aber es macht es nur komplizierter und fehlerhafter.

Und das ist der größte Nachteil imo: Es ist beträchtlich, aber unnötig länger. Ich bevorzuge Prägnanz.