了解 for 循环中的闭包?[复制]

Understanding closures inside a for loop? [duplicate]

提问人:Irins 提问时间:11/16/2018 更新时间:11/16/2018 访问量:37

问:

我试图把我的头包裹在我发现的闭包上,我理解表面上的闭包,但我在试图理解以下内容时遇到了困难。

我有一个带有 3 个输入字段的 div,上面有一个灰色框,如下所示: https://i.stack.imgur.com/RRYP8.png 当使用 jQuery 触发输入字段的事件时,灰色框应根据输入字段更改为特定文本。focus

下面是实现此目的的以下代码:

function main() {
  var tipText = [{
    'id': '#email',
    'tip': 'Only @pocketbook.com addresses allowed.'
  }, {
    'id': '#name',
    'tip': 'Your name must be capitalized.'
  }, {
    'id': '#employeeId',
    'tip': 'Employee IDs are found on the back of your badge.'
  }];

  function tipCallback(tip) {
    return function() {
      $('#tip').text(tip);
    };
  }

  function getTip() {
    for (var i = 0; i < tipText.length; i++) {
      var item = tipText[i];
      $(item.id).focus(tipCallback(item.tip));
    }
  }

  getTip()
}

$(document).ready(main);

我知道我们需要一个闭包,因为状态没有在 for 循环中持久化,但我仍然可以真正理解它。

JavaScript jQuery 闭包

评论

0赞 epascarello 11/16/2018
方法只返回一个对文本有引用的函数。像这样的例子:stackoverflow.com/questions/750486/...显示了当你没有函数,而只是一个对i
1赞 Rory McCrossan 11/16/2018
虽然你可以用闭包来解决这个问题,但你似乎把它弄得太复杂了。它可以使用属性和公共事件处理程序以更简单的方式实现。data
0赞 Rory McCrossan 11/16/2018
这是我上面提到的一个例子: jsfiddle.net/7vg6xwz3

答: 暂无答案