Javascript变量范围 - 在匿名函数中修复变量的值

时间:2015-11-28 17:24:17

标签: javascript jquery scope

我正在使用一个数组来构建一个插件的回调函数(select2):

假设我告诉我的<select>元素,当选择某些内容时,应该触发function1,然后使用提供的参数触发function2

然而,当某些事情未被选中时,function3应被解雇。

初始化<select>元素时,我使用以下javascript代码。

events = {
   'select': Array(
         { function: 'function1' },
         { function: 'function2',
           parameters: Array(1,2)
         }
   ),
   'unselect': Array(
         { function: 'function3' }
   )
}; //this is normally generated dynamically
for (var event in events)
   {
    var eventGroup=events[event];
    jQuery(this).on("select2:"+event, function (e) {
        var select=jQuery(e.currentTarget);
        var subtype=e.type.split(":")[1];
        console.log("Event group is", eventGroup);

        for (var i=0;i<eventGroup.length;i++)
            {
                var functionParams=new Array(e);
                if (eventGroup[i]['parameters']) for (var z=0;z<eventGroup[i]['parameters'].length; z++) functionParams.push(eventGroup[i]['parameters'][z]);
                if (eventGroup[i]['return']) return window[eventGroup[i]['function']].apply(this, functionParams);
                else window[eventGroup[i]['function']].apply(this, functionParams);

            }
        });

    }

事件正确触发,所以这不是插件中的错误,问题是,它们总是触发PHP生成的数组的LAST元素的函数(在本例中为function3)。

因此代码为每个事件创建了两个匿名函数(选择取消选择),但eventGroup变量在这两个匿名函数中都是相同的,它始终是分配给它的最后一个值。我一直认为,当我定义一个匿名函数时,它会存储它中使用的变量的值,就像它们在定义时一样,但看起来我错了。

如何将另一个变量附加到匿名函数,这仍然是定义时的变量? (我怎么能将eventGroup的CURRENT值附加到定义的匿名函数?)

0 个答案:

没有答案