将函数保存在数组中,并检索其索引

时间:2014-05-01 06:34:28

标签: javascript arrays function

如何获取存储在数组中的函数的索引?以下代码返回-1

var myArray = [ function(){console.log('fct1')} ];
myArray.indexOf( function(){console.log('fct1')} );

jsFiddle

更多细节:
我正在使用jQuery委托事件。每个事件都有一个或多个要回调的回调函数。我不可能知道这些功能是什么,因为它们没有预先编码。每个回调函数都将存储在一个数组中。当添加一个新的回调函数时,我想验证它是否已经在数组中,以避免重复,这些重复都将被事件调用。

2 个答案:

答案 0 :(得分:1)

JavaScript中的任何对象都不等于类似的东西,除了它本身。

var func = function() {
    console.log('fct1')
};
console.log(Object.prototype.toString.call(func));
# [object Function]

由于函数也是JavaScript中的对象,因此您无法使用另一个函数 object 搜索函数 object

为了能够获得匹配,您需要使用相同的函数对象,例如

var func = function() {
    console.log('fct1')
};
var myArray = [func];
console.log(myArray.indexOf(func));
# 0

答案 1 :(得分:1)

这是由于多次引用而发生的 您声明的每个函数都有不同的引用,并且不等于另一个 这就是indexOf无法识别它的原因。 试试这个:

var func = function(){console.log('fct1')};
var myArray = [func];
alert(myArray.indexOf(func)); // will alert 0.

Fiddle