将动态参数传递给IIFE

时间:2016-01-05 16:58:50

标签: javascript jquery iife

我将这个变量传递给IFFE时遇到了这个问题。做了一些阅读,仍然没有弄清楚。我真的很感激这里的一些指导。

  • 我有一个点击事件处理函数,可以从中获取某个ID 单击DOM时。
  • 我需要将该ID传递给IIFE
  • IFFE需要在数组中添加/删除该ID, 取决于它是否已经存在。

这就是我得到的:

活动:

$(document).on('click', 'input[type="checkbox"]', check);

点击处理程序:

function check() {
    var id = $(this).closest('ul').attr('data-id');
    return id;
}

IIFE:

var checkID = (function (val) {

    var arr = [];

    return function () {

        var i = arr.indexOf(val);

        if (i === -1) {
            arr.push(val);
        } else {

            arr.splice(i, 1);
        }
        return arr;
    }

})(id);

现在我正在获取ID,但却无处可归。

在我的IIFE中,我确实传递了一个id变量,但它未定义。

那么,如何将ID变量从check()传递到checkID IIFE?

其他解决方案也欢迎。

由于

3 个答案:

答案 0 :(得分:2)

在你的clickHandler

function check() {
    var id = $(this).closest('ul').attr('data-id');
    checkID(id);
}

并将checkID更改为

var checkID = (function () {

    var arr = [];

    return function (val) {

        var i = arr.indexOf(val);

        if (i === -1) {
            arr.push(val);
        } else {

            arr.splice(i, 1);
        }
        return arr;
    }

})();

答案 1 :(得分:1)

我认为你需要做其他事情。您的public Enum itemType { FRUITS("fru"), VEGETABLES("veg"), LIQUOURS("liq"), SODAS("sod"); private String dbCode; public ItemType(String dbCode){ this.dbCode = dbCode; } public String getDbCode(){ return this.dbCode; } public static boolean isLiquid(ItemType type){ switch(t){ case SODA: case LIQOURS: return true; default: return false; } } 函数将返回事件处理程序使用的函数,但是在单击处理程序运行后,它也会调用一个回调函数来传递数组。

check函数看起来像是你的两个函数的混搭:

check

正如您所看到的,它将一个回调函数作为参数,每次执行时都会调用它,并传递当前数组function check(callback){ var arr = []; return function(){ var id = $(this).closest('ul').attr('data-id'); var i = arr.indexOf(id); if (i === -1) { arr.push(id); } else { arr.splice(i, 1); } callback(arr); } } 。例如,这是我的测试回调:

arr

最后,您的事件处理程序将如下所示:

function handler(arr){
 alert("Array has " + arr.length + " elements");
}

实例:https://jsfiddle.net/src282d6/

答案 2 :(得分:0)

在您的 IIFE 函数中使用类似 getter/setter 的函数使其更有条理和可读性。然后,使用这些函数在您的 IIFE 函数中传递、存储和读取数据。

var checkID = (function () {
    // your array
    var arr = [];
    // public
    return { 
      // get
      getArray: function(){
        return arr;
      },
      // set value
      setArray: function(val) {
        var i = arr.indexOf(val);
        if (i === -1) {
          arr.push(val);
        } else {
          arr.splice(i, 1);
        }
      }
    }
})();

如下使用:

checkID.getArray(); // returns default empty array []
checkID.setArray('car1');
checkID.setArray('car2');
checkID.setArray('car3');
checkID.setArray('car4');
checkID.setArray('car4'); // test splice()
checkID.getArray(); // returns ["car1", "car2", "car3"]