2016-06-27 68 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

Closures使用closure '记住' 它们被创建的环境。

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,我就宁可不回答;)你想了解双方'Closures'以及'#功能来bind'使任何举动..都有完全不同的目的..;) – 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); 
 
})();

这里,ul是一样的a变量。

0

您可以通过查找当前元素的父级来使用UL。为了得到与特定类型的直接父,你可以使用.closest()方法

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

}.bind(ul, ele)); 
相关问题