Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在数组中保存函数并检索其索引_Javascript_Arrays_Function - Fatal编程技术网

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

Javascript 在数组中保存函数并检索其索引,javascript,arrays,function,Javascript,Arrays,Function,如何获取存储在数组中的函数的索引?以下代码返回-1 var myArray = [ function(){console.log('fct1')} ]; myArray.indexOf( function(){console.log('fct1')} ); 更多详细信息: 我正在使用jQuery委派事件。每个事件都有一个或多个要调用的回调函数。我不可能知道这些函数是什么,因为它们没有预先编码。每个回调函数将存储在一个数组中。添加新的回调函数时,我想验证它是否已经在数组中,以避免事件调用的重复

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

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

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

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

var func = function() {
    console.log('fct1')
};
console.log(Object.prototype.toString.call(func));
# [object Function]
因为函数在JavaScript中也是对象,所以不能用另一个函数对象搜索函数对象,而另一个函数对象也会这样做

要获得匹配,需要使用相同的函数对象,如下所示

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

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

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

问题在于我试图查找的函数始终是匿名的。我可以将其与
.toString()
匹配吗?还是说这是一个很大的拒绝@Westerfaq您是否使用该函数构造数组?是的。然后我得到另一个函数,必须验证它是否已经在数组中。@Westerfaq哦,那么这是不可能的,除非它是同一个函数对象:'(我将使用
.toString()
然后,因为它似乎起作用了。我希望有一种更传统的方法来做。谢谢你,不是引用,而是实例。你可以对同一个对象有多个引用。