javascript - 让js闭包立即执行

标签 javascript jquery

我可以在以下代码中看到一个问题:

var elems = {
    'elem1': 'param1fds',
    'elem2': 'paramaafds2',
    'elem3': 'paramfdsfd3fdsfds'
  };

for (var k in elems) {
  $('#' + k).click(function(e) {
  // k is always elem3 when I click on the element
  // elems[k] == 'paramfdsfd3fdsfds'

当代码执行时,k 等于 elem3。我该如何处理?

最佳答案

标准通用解决方案是添加 IIFE在闭包中保护变量:

for (var k in elems) {
   (function(k){
     $('#' + k).click(function(e) {
        // k is always elem3 when I click on the
     })
    })(k);
}

当您使用 jQuery 时,您还可以使用 $.each:

$.each(elems, function(k){
     $('#' + k).click(function(e) {

第三种解决方案是使用 on 并提供数据:

for (var k in elems) {
    $('#' + k).on('click', {k:k}, function(e) {  
         // use e.data.k here

在不久的将来,在 ES6 中,第四种解决方案将是使用 let 的 block 作用域变量。 :

for (let k in elems) {
   $('#' + k).click(function(e) {
      // k is OK

关于javascript - 让js闭包立即执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30305022/

相关文章:

javascript - jquery选择器全选

javascript - lodash 按多个键对数组进行分组

javascript - 具有多个选择标签的 jQuery select2

javascript - 用户在 HTML5 Canvas 应用程序中绘制的平滑锯齿状线条?

javascript - 如何添加标签 <html :submit> dynamically?

javascript - Jquery,每2秒添加一次元素

javascript - Jquery ui 可排序

javascript - 使用 Express 和 Javascript 通过 POST 登录后重定向

javascript - 对象预期的 Microsoft Jscript 运行时错误 - Node js

javascript - 尝试在图表上绘制虚线