Javascript: "Gebundene" Variablen
-
Hey,
ich hab in Javascript ungefähr folgendes Snippet. Es gibt jedem Objekt in einer Liste eine Funktion, die mit dem Index des Objekts arbeitet:
var list = [ ... ]; function foo() { for ( var idx in list ) { var item = list[idx]; item.someFunc = function() { alert(idx); }; } }
Problem: Bei Aufruf der Funktion arbeitet sie immer mit dem letzten Index. Bei der Funktionsdefinition wird anscheinend eine Referenz auf die "idx"-Variable übergeben. Ich will aber mit dem "richtigen" Wert von "idx" zu diesem Zeitpunkt arbeiten.
Unschöner Workaround:
function createMyFunction( index ) { return function() { alert(index); }; } ... item.someFunc = createMyFunction(idx);
Kennt jemand einen vernünftigen Weg ohne den Workaround?
-
fdfdg schrieb:
Problem: Bei Aufruf der Funktion arbeitet sie immer mit dem letzten Index.
Also beim Aufruf von
item.someFunc()
wird bei jedem Objekt der Liste der allerletzte Index 'alert'et, nicht der passende.
-
function() { alert(idx)} ist eine Clojure. idx ist im outer scope deklariert und hat nach ablauf der schleife den letzten wert.
versuchs mal mit:
function() { var local = idx; alert(local)}
-
item.someFunc = function(idx) { return function(){ alert(idx);}}(idx);
idx wird gecaptured aber nicht kopiert. Deshalb musst du es neu scopen.
-
roflalter was hab ich da geschrieben
-
Perfekt, ich danke euch beiden!
Shades Variante funktioniert.