如何比较JavaScript中的两个静态函数是否相等?
如何比较JavaScript中的两个静态函数是否相等?
如何比较JavaScript中的两个静态函数是否相等?
String(f1) === String(f2)
String(f1) === String(f2)
,除非你有一个我不知道的自定义 string()
方法 :) - Andy E""+f1 === ""+f2
。 - Andy E(String(f1.bind(this)) === String(f1.bind(this)))
一起工作吗?我认为不行。 - Martin Meeservar 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的观点 - 你可能永远不应该这样做。
var f1 = f2 = function(){ ... }
的结果是 f2
成为一个全局属性,因为将函数赋值给未声明的变量 f2
。未声明的赋值通常是有害的,所以最好避免使用这种模式。另外,不要依赖于 Function.prototype.toString
—— 它没有标准化,并且在不同的浏览器中会有所不同。 - kangaxjavascript:(function(){var f1=function(a){return a;},f2=function(a){return a;};alert(f1.toString());alert(f2.toString());alert(""+f1==""+f2);})();
- Dan Beambind()
方法应用不同作用域到两个相同函数进行比较时,这将无法正常工作。这是有问题的。 - vsync好的,就这么简单 - 如果你要比较函数,我想你肯定有一个理由。那么你的理由是什么呢? 我的理由是为了避免重复运行某个特定的函数。 我是这样做的(只是代码片段,以便理解)
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。 顺便打开您的Firebug控制台,在JSBin示例中查看它
create1minuteCallback
函数将设置一个1分钟的计时器,并在每个滴答上调用回调函数。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);