相等的界定:作用域相同,函数内容相同否则,不相等如下代码:
<script type="text/javascript">var txt = 'w';var x = function(){
    var txt = 'x';
    return function(){alert(txt)};
};var y = function(){
    var txt = 'y';
    return function(){alert(txt)};
};
var a = x(),b = y();var A = function(){alert(txt)},B = function(){alert(txt)};//怎样判断a和b不等
//怎样判断A和B相等</script>
欢迎大家踊跃讨论!

解决方案 »

  1.   

    关注。
    用valueOf()或toString()可以获得函数的源代码。
      

  2.   

    = =,这个不知道啊...
    原先FF2左右的版本还可以用eval来访问到scope里面,不过现在FF3貌似把那个功能给和谐了...
      

  3.   


    是啊,现在object.eval木有用鸟~~```   - -!
      

  4.   

    作用于是无法判断的,只有被执行的时候才会知道
    如果就函数体而言,可以判断是否相等(检查函数体字符串即可)但a!=b, A!=B,a!==b, A!==B,这是永远成立的(内存地址个各不相同)
      

  5.   

    函数应该也能看做是对象吧
    对象就有toString方法
    对象就有内存地址
      

  6.   

    公布个 也许楼主见过的现象JavaScript存在这样的判定函数吗?
    答案是不存在,证明如下:假定存在一个function P能判断任意两个一般函数f1和f2是否等价,即
    若f1、f2等价,P(f1,f2) return true
    若f1、f2不等价, P(f1,f2) return false;
    现在我定义一个函数P1
    function P1(f1,f2){
        if(P(P,f1) && P(P1,f2)) return false;
        else return P(f1,f2);
    }
    那么对于P(P,P1)
    1) 若P(P,P1) return true,那么P,P1等价,可P1(P,P1)却return false,显然和P,P1等价假设矛盾
    2) 若P(P,P1) return false,那么P1(P,P1) return false,而对于任意其它f1,f2,显然P1(f1,f2)的返回值都和P(f1,f2)的返回值完全相同,根据前面的定义,P与P1等价,同P(P,P1) return false矛盾。
    综上所述,不存在一个函数P,能够判定JavaScript的两个function等价。
    证毕。
      

  7.   

    var a,b这两个变量
    如果这样赋值 a和b是值对象
    a = 3;
    b = 4;
    这时候比较是拿值来比较的 
    a = function(){return true;};
    b = function(){return false;};
    这个时候a和b已经被function一词给改变了 a和b是类对象了 比较的时候是拿a和b这两个对象在内存中的地址来比较的
    要想比较两个方法相等
    a = "function(){return true;};";
    b = "function(){return false;}";
    就直接拿a和b的字符串来比 
      

  8.   

    valueOf == 可以判断函数形式,但不能判断域你为什么要判断域呢。试试
     
    .prototype.construcotr == 可以吗
      

  9.   

    函数是对象,复合型的值。一般比较引用,同一个引用,就相等;否则不等。
    比较toString几乎没任何意义:<script>
    function doSomething() {
      alert('go stop');
    }
    function f() {
      doSomething();
    }
    var f2 = function() {
    function doSomething() {
      alert('do nothing');
    }
    function f() {
      doSomething();
    }
    return f;
    }();
    f();
    f2();
    alert(f);
    alert(f2);
    alert(f == f2);
    </script>
      

  10.   

    从数学上来讲这是一个函数的“等价判定”问题我可以证明这个问题不可解:证明:
        假定存在一个function P能判断任意两个一般函数f1和f2是否等价。
    若f1与f2等价 P(f1,f2) 返回true
    若f1与f2不等价  P(f1,f2) 返回false
    重新定义一个新的function P1:
    function P1(f1, f2){
         if(P(f1,P) && P(f2,P1)) return false;
         else  return P(f1,f2);
    }现在讨论P(P,P1)的值:
        1)若P(P,P1) return true,则P1与P等价,但P1(P,P1) 却return false,与P和P1等价性矛盾。
        2)若P(P,P1) return false,则P1与P不等价。但P1(P,P1)return false,而对于其他任意情况的f1,f2,显然P(f1,f2)的返回值都和P1(f1,f2)的返回值相同。根据等价性的定义P与P1等价,与P(P,P1) return false矛盾。
        结论:不存在能判断任意两个函数等价性的一般函数,由于一般函数与图灵机程序是等价的,故不存在能判断任意两个一般递归函数等价性的程序。“任意两个一般函数等价性”是不可判定的。
        证毕。
      

  11.   

    function isSameFunction(a,b){
        return (typeof a=="function" && typeof b=="function" && a.toString()==b.toString());
    }
    //这样可以判断两个函数(字面上)相同,包括空格和缩进等都相同才返回true。
    //现实中,function a(s){alert(s)} 和 function abc(str){alert(str)} 也是等效的函数,但这个就不容易判断了,但不是不可以判断,只是没那个必要。