2016-06-27 2 views
1

JavaScriptの内部関数のクロージャスコープ変数にアクセスする方法。JavaScriptのClosure Scopeから変数にアクセスする方法

私はsetTimeout機能にUL変数にアクセスしたいです。

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)); 

答えて

1

setTimeout

Closuresclosureを使用して、それが作成された環境 'を覚えています'。

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を使用することができ、私は答えることを好まないだろう。)あなたが同様に機能#1 bind'を作るために 'と' Closures'の両方を理解することが想定されています任意の移動..全く異なる目的を持っています;) – Rayon

+0

あなたは私が理解できるように基本的な異なる目的を提供する良いリンクを私に与えることができます、私は例を見てきましたが、それらは両方で実行することができます。 –

0

正常に動作します。 ulの有効範囲は、setTimeout関数内で有効です。

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

このような単純なコードはあなたを説明します。ここでは

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

ula変数と同じです。

0

現在の要素の親を見つけることでULにアクセスできます。指定されたタイプとの直接の親を取得するために、あなたは.closest()方法

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

}.bind(ul, ele)); 
関連する問題