Javascript 将函数保存在数组中,然后检查它,但始终返回-1

Javascript 将函数保存在数组中,然后检查它,但始终返回-1,javascript,jquery,Javascript,Jquery,我有这样一个javascript函数(我使用jquery) 为什么调用第二个addArray时,jQuery.inArray总是返回-1?假设不是(因为我第一次已经添加了该数组) 这里是否有我做错的地方???如果对象是该对象的完全相同实例,则对象仅彼此相等(因此仅触发inaray检查) 例如: var a = {}, b = {}, c = a; a == b // false, different instances a == c // true, same instance 您的两个函数可

我有这样一个javascript函数(我使用jquery)

为什么调用第二个addArray时,jQuery.inArray总是返回-1?假设不是(因为我第一次已经添加了该数组)


这里是否有我做错的地方???

如果对象是该对象的完全相同实例,则对象仅彼此相等(因此仅触发
inaray
检查)

例如:

var a = {}, b = {}, c = a;
a == b // false, different instances
a == c // true, same instance

您的两个函数可能相同,但它们仍然是两个函数,而不是同一个。

您正在将两个独立且唯一的函数对象推入数组中。要推送相同的函数,您需要先引用它,然后两次都推送它。这些函数是匿名的,因此
.inArray
永远不会为真。如果您执行了
var x=function…
并按下按钮,这可能会起作用。问题并不在于它们是匿名的。问题是它们是独一无二的。@CrazyTrain这不是一回事吗?匿名函数总是unique@Ian:不,有两种看法。首先,如果你给函数命名,它们不是匿名的,但它仍然不会给出想要的结果。第二个是您可以将第二个调用更改为
arr.push(arr[0]),所以现在您正在推送相同的(非唯一的)匿名函数,它将给出所需的结果。是的。他可能会尝试将函数分配给一个变量,然后使用与arg相同的变量调用addArray mutliple times。值得一提的是,函数也会发生这种情况(如OP的情况),因为在JavaScript中函数也是对象。使用identity操作符(
==
),如果x和y引用同一个对象,则返回true。否则,返回false。
var a = {}, b = {}, c = a;
a == b // false, different instances
a == c // true, same instance