本帖最后由 xinfucheng 于 2012-06-08 20:38:00 编辑

解决方案 »

  1.   

    函数如果不调用, 只定义, 是不是内存(栈)里就没有啊?
    我该怎么理解这个
    m=function(){return 2}
    n=function(){return 2}
    n为什么不等于m啊? m,n里存的是什么?地址吗? 是什么地址
      

  2.   

    m、n相当在运行的时候相当于Function对象的2个实例,你说2个对象能相等吗?对象地址都不同。
      

  3.   

    我知道
    var obj = new Object(); obj存储在栈中它指向于new Object()这个对象,而new Object()是存放在堆中的。既然说函数m=function(){return 2}是个对象,是不是这样?
    m存储在栈中,它指向于new Function(return 2")这个对象
      

  4.   

    [color=#FF0000我又看了下汇编语言---函数调用栈  里面说
    当发生函数调用的时候,栈空间中存放的数据是这样的:
    调用者函数把被调函数所需要的参数按照与被调函数的形参顺序相反的顺序压入栈中,即:从右向左依次把被调函数所需要的参数压入栈;
    ][/color]难道说函数不调用的时候存在堆里面,调用的时候出现在栈里,是这样吗? 哪位可以稍稍系统的说说
      

  5.   

    在javascript中数据类型分两种:基本类型值引用类型值。基本类型值(五种:undefined,null,boolean,number,string)保存在栈内存中,即这种值是完全保存在内存中的一个位置。(因为这些基本类型的值所占的字节是可预先知道,所以可以知道他在内存中占得大小,可以给他分配空间);引用类型值是保存在堆内存中的,然后将其地址保存到栈内存中(因为地址的大小是固定的)。
    m=function(){return 2}
    n=function(){return 2}
    你上面这里是两个函数的表达式,当执行到函数所在的语句时,m,n就会保存对函数的引用,在执行之前他们的值是undefined(如果不懂可以上网搜一下函数表达式跟函数声明的区别)。m,n引用的是不同对象,怎么可能相等呢?
      

  6.   

    m和n在执行之前是undefined? 不是函数体本身嘛?
      

  7.   

    alert(a);
    var a = function(){
    alert('DFS');
    }alert(a);
    var a = function(){
    alert('DFS');
    }
      

  8.   

    上个贴错了
    alert(a);
    var a = function(){
    alert('DFS');
    }alert(a);
    function a(){
    alert('DFS');
    }
      

  9.   

    谢谢chang_yuan_2011的耐心,我明白你的意思,
    你能不能直接回答一下我这个问题,比如下面这个定义,在没有任何调用的情况下:
    var a = function(){
      alert('DFS');
    }a是不是存在中,它里面存了个地址,这个地址指向中的函数体:
    function(){
      alert('DFS');
    }
    实际是不是这样呢
      

  10.   

    函数名是指针,函数是对象
    var a=function(){alert(1);}
    左边是函数指针,右边是函数体是对象。
    var a=function(){alert(1);}
    var b=function(){alert(1);}
    即使函数体内容相同,但是存放它们的地址不同,所以a和b的引用地址不一样,于是a!=b