你能比较javascript中的匿名函数吗?

时间:2014-01-24 14:14:05

标签: javascript

我需要检测两个匿名函数是否相同。

在控制台中,为什么以下行返回false

(function() { alert("hello"); }) === (function() { alert("hello"); })

是否有比较运算符或其他方法来确定这些“功能”相同?

修改

人们要求使用这个。

用于删除先前已推入函数数组的函数。有关简化测试,请参阅http://jsfiddle.net/w6s7J/

2 个答案:

答案 0 :(得分:1)

(function() { alert("hello"); }) === (function() { alert("hello"); })

返回 false beacouse它是javascript中的不同对象。

(function() { alert("hello"); }).toString() === (function() { alert("hello"); }).toString()

返回 true ,因为它们是相同的字符串。

此外,函数对象具有name属性,该属性返回函数的名称(但not works in IE):

var  a = function b() {}
alert(a.name);//write b

答案 1 :(得分:1)

没有真正的方法来比较“功能”的2个不同的匿名函数。

您可以使用示例代码检查它们是否是同一个对象。

var func = function () {
    alert('hello');
};

alert(func === func);

以上方法可行,因为您要检查两个对象是否相同。

唯一的比较方法是将它们作为字符串进行比较。

var func1 = function () {
    alert("hello");
};

var func2 = function () {
    alert('hello');
};

alert(func1.toString() === func2.toString());

糟糕!,它们在功能上是相同的,区别在于使用的引号,所以这会返回false。