【问题标题】:How to access variable from Closure Scope in JavaScript如何在 JavaScript 中从闭包范围访问变量
【发布时间】:2016-06-27 11:25:34
【问题描述】:

如何在 JavaScript 中访问内部函数中的闭包范围变量。

我想在 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));

【问题讨论】:

    标签: javascript jquery closures


    【解决方案1】:

    setTimeout 中使用closure

    Closures“记住”创建它们的环境。

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

    【讨论】:

    • @ShanKhan,我宁愿不回答;)您应该了解ClosuresFunction#bind 才能采取任何行动..两者的目的完全不同.. ;)
    • 你能给我一个很好的链接,它提供了一个根本不同的目的,所以我可以理解,我已经看到了例子,但这些例子都可以执行。
    【解决方案2】:

    正常工作。 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 变量相同。

    【讨论】:

      【解决方案3】:

      您可以通过查找当前元素的父元素来访问 UL。要获取指定类型的直接父级,可以使用.closest() 方法

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-07
        • 1970-01-01
        • 1970-01-01
        • 2010-11-16
        • 1970-01-01
        • 2019-05-31
        • 1970-01-01
        • 2014-11-11
        相关资源
        最近更新 更多