2016-03-30 27 views

Antwort

4

Die innere Funktion beliebige Parameter nicht enthalten sollte,

var giveFunction = function(text) { 
    return function() { 
     console.log(text) 
    } 
} 

Lassen Sie es einen Verschluss erstellen. Wenn es einen Parameter hat, würde dieser während der Ausführung gelesen werden und undefined würde gedruckt werden, da Sie diese Funktion nicht mit irgendwelchen Argumenten aufrufen.

Wenn Sie Ihren Code wollen zu arbeiten, dann müssen Sie bind dafür verwenden,

var giveFunction = function(text) { 
    return function(text) { 
     console.log(text) 
    }.bind(null, text) 
} 
var test = giveFunction('this is a test'); 
test(); //'this is a test' 
+0

Welche Bedeutung binden vs Verschluss in diesem Fall der Verwendung? Scheint, als ob die Verwendung von Verschluss die klügere Wahl ist. – Elliot

+0

@Elliot Ich verstehe nicht, was Sie fragen. Verschluss und Bindung funktionieren anders. –

+0

@ downvoter: Möchten Sie kommentieren? Fehle ich hier etwas? Danke –

1

Lässt einen Schritt weiter gehen und fragen, warum?

var outerFunction = function(outerParameter) { 
    return innerFunction function(innerParameter) { 
    // in here we have access to anything in this function and the outer function 
    // all the way to out the the global scope 
    // therefore, we dont need to pass innerParameter in again as a parameter! (in your case we 'next') 
    } 
    /// now over here, outside of innerFunction, we do NOT have access to innerParameter! 
} 

die oben genannten Grundsätze, um Ihren Code So wenden wir haben:

var giveFunction = function(text) { 
    return function() { 
     console.log(text) 
    } 
} 
var test = giveFunction('this is a test'); 
test() 

die jetzt funktioniert!

Schließlich Kasse die meisten upvoted Post unter dem JavaScript-Tag: How do JavaScript closures work?

Verwandte Themen