如何比较javascript中的两个静态函数是否相等?
答案 0 :(得分:6)
String(f1) === String(f2)
答案 1 :(得分:6)
var f1 = f2 = function( a ){ return a; };
在这里,您可以使用f1 === f2
,因为它们指向相同的内存并且它们是相同的类型
var f1 = function( a ){ return a; },
f2 = function( a ){ return a; };
这里你可以使用Andy E使用的字节保护程序(它隐式地将函数转换为它的正文文本作为字符串),
''+f1 == ''+f2
。
这是场景背后发生的事情的要点:
f1.toString( ) == f2.toString( )
编辑:回顾这篇文章一年后,我同意@kangax - 你可能永远不会这样做。
答案 2 :(得分:0)
每当我需要比较函数时,我确保没有范围模糊并使用相同的函数对象。
假设我有一对库函数将回调作为参数之一。为了这个例子,create1minuteCallback
函数将设置一个1分钟的计时器并在每个tick上调用回调。 kill1minuteCallback
将关闭回调,您必须传递与create1minuteCallback
相同的回调函数。
function create1minuteCallback(callback){
//implementation
}
function kill1minuteCallback(callback){
//implementation
}
很明显这不会起作用,因为我们传递的函数在第二行是不同的:
create1minuteCallback(function(){alert("1 minute callback is called");});
kill1minuteCallback(function(){alert("1 minute callback is called");});
我通常这样做:
function callbackFunc(){alert("1 minute callback is called");}
create1minuteCallback(callbackFunc);
kill1minuteCallback(callbackFunc);
答案 3 :(得分:0)
嗯,就像那样 - 如果你要比较函数,你这样做是出于我假设的原因。你的理由是什么? 我的理由是两次没有运行某个功能。 我这样做了(只是片段代码才能得到这个想法)
var x = function(){
console.error("i am a functionX");
}
var y = function(){
console.error("i am a functionX");
}
var z = function(){
console.error("i am a functionZ");
}
var x2= x;
var obj = new Object();
obj[x] = "";
obj[x2] = "";
obj[y] = "";
obj[z] = "";
obj.abc = "xaxa";
for (prop in obj) {
if (obj.hasOwnProperty(prop)) {
console.error(obj[prop] + " hello " + prop);
}
}
函数x和y是相同的,即使它们具有不同的空格。 x和y与z不同,因为z具有不同的console.error。 Btw open your firebug console to see it in the jsbin example