javascript中的函数相等

javascript中的函数相等,javascript,node.js,Javascript,Node.js,JS引擎实际上如何比较对象(如函数声明)是否相等 var f1 = function(){}; var f2 = function(){}; console.log(f1 === f2); //false 为了确定对象引用不同,幕后实际发生了什么?是比较内存位置吗?函数是对象。 对象的不同实例永远不会相等(或不严格) 指针应用的严格相等: var a = b = {}, c = {}; console.log(a === b, a === c); // true false =检查值是否

JS引擎实际上如何比较对象(如函数声明)是否相等

var f1 = function(){};
var f2 = function(){};

console.log(f1 === f2);  //false
为了确定对象引用不同,幕后实际发生了什么?是比较内存位置吗?

函数是对象。
对象的不同实例永远不会相等(或不严格)

指针应用的严格相等:

var a = b = {}, c = {};
console.log(a === b, a === c); // true false

=
检查值是否相等

=
检查值与变量类型或返回类型是否相等

var foo = function() {
    a = 1;
 }; 

 var bar = function() {
    a = 1;
 }; 

alert(foo.toString() == bar.toString());​

这将返回true。

它们也从来不是非严格相等的。@Pointy,我只是不确定
toString类似于
-的方法,但似乎是真的。=)如果您不希望看到
new Object()===new Object()
,那么为什么您希望看到
new Function()===new Function()
?刚才看到了您的编辑。在坚果壳中,是的,它是在比较内存位置。是的,但你只是比较翻译的
string
值,而不是实际对象本身。@Mike是对的。这与OP的问题无关。此外,您可以通过删除分配给global
a
Hm的任务来优化您的代码,现在我明白为什么会在这里给出这个答案。它只是演示了一种通过代码比较函数的技巧(但并不总是正确的)
foo.toString().replace(/\s+/g',)
在某些情况下可能更好。@Mike是的,我比较了字符串值。两个对象存储在两个不同的位置。所以,当我们试图比较时,实际上是在比较两个不同的内存位置,它们总是不同的。若它们指向同一个位置,那个么只有结果才是真的var foo=function(){a=1;};var-bar=foo;alert(foo==bar)`函数在Javascript中没有参数和返回类型。