For循环中的jQuery关闭

时间:2018-07-18 23:17:58

标签: javascript jquery closures

我熟悉JavaScript闭包。多年前,当我在自己的项目中工作时发现了关闭问题。在面试候选人时,我还加入了著名的“ for-loop-button”问题。

现在,我用jQuery问了这个问题。而且,我一生无法解决问题。

item.ItemTitleWithQtyPrice = item.ItemTitle + " Quantity " + it.Quantity + " Total Price: ₹ " + item.Total;

有人知道如何在约束范围内在此处创建必要的闭包吗?

我尝试将匿名函数包装在括号中,返回内部函数,等等。

https://jsfiddle.net/hmw0gk4c/791/

谢谢。

3 个答案:

答案 0 :(得分:0)

这将是你的追求吗?

$(document).ready( function() {
	var buttons = $('button');

	for( var i = 0; i < buttons.length; ++i ) {
		buttons.eq(i).click(
			// ONLY EDIT THE CODE BELOW THIS LINE
			return (function() {
				$('ul').append('<li>' + i + '</li>')
			})();
			// ONLY EDIT THE CODE ABOVE THIS LINE
		);
	}
});

答案 1 :(得分:0)

这可以解决问题:

$(document).ready( function() {
  var buttons = $('button');

  for( var i = 0; i < buttons.length; ++i ) {
    buttons.eq(i).click(
        // ONLY EDIT THE CODE BELOW THIS LINE
        function() { 
                var i2 = i + 1; 
                return function() {
                    $('ul').append('<li>' + i2 + '</li>');
                }
            }()
        // ONLY EDIT THE CODE ABOVE THIS LINE
    );
  }
});

答案 2 :(得分:0)

这对我有用:

$(document).ready( function() {
  var buttons = $('button');
  for( var i = 0; i < buttons.length; ++i ) {
    buttons.eq(i).click(
      // ONLY EDIT THE CODE BELOW THIS LINE
      (function(y) {
        return (function() {
          $('ul').append('<li>' + y + '</li>')
        });
      })(i)
      // ONLY EDIT THE CODE ABOVE THIS LINE
    );
  }
});