最近一些资料说函数就是一个对象,
于是我有了下面的测试。
<script>
     function fn1(arg){
return rel = function (num){
   return arg + num;
     }

     var f = fn1(20);
     var f2 = fn1(10);
     f(20);  //40                                  
     f2(20); //30
</script>
这样我就有疑问了,既然函数是一个对象,那么f和f2应该指向的是同一个对象,那么结果应该
分别是 30,30。
求助高手。
java对象JavaScript函数

解决方案 »

  1.   

      var f = fn1(20);
    调用fn1返回了一个方法然后赋值给f
    相当于
    var f = function(num){
        return 20 + num;
    }
      

  2.   

    你传递了不同的参数,当然导致不同的结果呀。那函数相当于
    function fn(a,b){
        return a+b;
    }
    var f1 = fn(20,20);
    alert(f1)
    var f2 = fn(10,20);
    alert(f2) 
      

  3.   


    这句话存在逻辑问题,函数是对象,函数多次运行返回的值必须指向同一个对象么?因为函数每次运行,返回的rel都不一样。就像 function test(){ return new Object();}一样,不会每次都返回相同的对象。返回的rel是一个函数,函数内部引用了外部的arg,因此arg会一直保留。两次运行的arg是不一样的,虽然都叫arg。第一次返回的rel内部使用的是第一次的arg,第二次的用的是第二次的arg。
      

  4.   

         function fn1(arg){
    return rel = function (num){
       return arg + num;
         }     var f = fn1(20);   =>   f = function(num) { 20 + num;}; 
         var f2 = fn1(10); =>    f2 = function(num) { 10 + num;}; 
         f(20);  //40                                  
         f2(20); //30没错啊
      

  5.   


    这句话存在逻辑问题,函数是对象,函数多次运行返回的值必须指向同一个对象么?因为函数每次运行,返回的rel都不一样。就像 function test(){ return new Object();}一样,不会每次都返回相同的对象。返回的rel是一个函数,函数内部引用了外部的arg,因此arg会一直保留。两次运行的arg是不一样的,虽然都叫arg。第一次返回的rel内部使用的是第一次的arg,第二次的用的是第二次的arg。是的是的,这思想老是转不过来,以后再JS中看见函数,我就要马上翻译成 new Fuction()了