如何在JavaScript中访问闭包作用域中的变量

How to access variable from Closure Scope in JavaScript

本文关键字:作用域 变量 闭包 访问 JavaScript      更新时间:2023-09-26

如何访问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));

使用 closure setTimeout

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

工作正常。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变量是一样的

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

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