2016-06-27 13 views
1

Zugriff auf die Closure-Bereichsvariablen in der inneren Funktion in JavaScript.Zugriff auf die Variable aus dem Closure-Bereich in JavaScript

Ich möchte setTimeout Funktion UL Variable zuzugreifen.

ul.find("li").each(function (a, ele) { 

     $(ele).attr("tabindex", options.items[a].tabindex); 

     $(ele).on("focusout", function() { 

      setTimeout(function() { 
       **//ACCESS UL HERE** 
       debugger; 
      }, 1); 

     }.bind(ul,ele)); 
    }.bind(ul)); 

Antwort

1

Mit closure in setTimeout

Closures 'erinnern' die Umgebung, in der sie erstellt wurden.

ul.find("li").each(function(a, ele) { 
    $(ele).attr("tabindex", options.items[a].tabindex); 
    $(ele).on("focusout", function() { 
     setTimeout(function(ul) { 
     return function() { 
      console.log(ul); 
     } 
     })(ul), 1); 
    }.bind(ul, ele)); 
}.bind(ul)); 
+0

@ShanKhan verwenden, werde ich es vorziehen, nicht zu antworten;) Sie sind wohl beide 'Closures' sowie' Funktion # bind' verständlich zu machen jede Bewegung .. Beide haben einen ganz anderen Zweck ..;) – Rayon

+0

können Sie mir eine gute Verbindung, die einen grundlegenden anderen Zweck bietet, damit ich verstehen kann, habe ich Beispiele gesehen, aber diese können von beiden durchgeführt werden. –

0

Es funktioniert normal. Der Gültigkeitsbereich der ul gilt innerhalb der setTimeout Funktion.

ul.find("li").each(function() { 
    $(this).attr("tabindex", options.items[a].tabindex) 
    .on("focusout", function() { 
     setTimeout(function() { 
     ul.css('color', 'orange'); 
     }, 1); 
    }); 
}); 

Ein einfacher Code wie dies wird Ihnen erklären:

(function s() { 
 
    var a = "hi"; 
 
    setTimeout(function() { 
 
    console.log(a); 
 
    }, 1000); 
 
})();

die hier ul ist die gleiche wie die a Variable.

0

Sie können auf den UL zugreifen, indem Sie das übergeordnete Element des aktuellen Elements finden. Für den sofortigen Elternteil mit dem angegebenen Typ erhalten, können Sie .closest() Methode

$(ele).on("focusout", function() { 
    var el = $(this); 
    setTimeout(function() { 
    el.closest("ul"); 
    debugger; 
    }, 1); 

}.bind(ul, ele)); 
Verwandte Themen