用var定义的话就不能,因为没有从内部遍历自己的方法,而var限定了它的作用域在内部,对外部是不可见的。除非被定义为外部可访问的属性,才可以通过for遍历到

解决方案 »

  1.   

    呵呵,我也写了一个容易出错的,效率应该还将就:<SCRIPT LANGUAGE="JavaScript">
    <!--
    function getParameterNames(functionObj){
    reg=/var\s+([\w]+)/g
    var rs = functionObj.toString().match(reg);
    for (var i=0;i<rs.length;i++){
    rs[i]=rs[i].replace(reg,"$1")
    }
    return rs;
    }
    function xx(){
    var va1=0;
    var va2=0;
    var va3=0
    }
    function test(){
    var v="var i=0"
    }
    alert(getParameterNames(xx));
    alert(getParameterNames(getParameterNames));
    alert(getParameterNames(test));//这里出错
    //-->
    </SCRIPT>
      

  2.   

    与 emu(ston) 商榷
    这个小错是可以排除的:
    当 functionObj.toString() 中无“eval(”时,将“"'”间的内容删去再做分析。
    如何?
      

  3.   

    需要考虑的情况远不只一个情形,比如:
    var v='var i=0' // 应该出来v
    var v="asdf\";var i=\"0" //应该出来v
    var v="asdf";var i="0"; //应该出来v和i
    ...
      

  4.   

    这个emu(ston) 的已满足了
    只是对
    var v='var i=0' // 应该出来v
    var v="asdf\";var i=\"0" //应该出来v
    会多出 i 来
      

  5.   

    up次数超过3次了就得换ID,没办法
      

  6.   

    我猜想也是。
    本来排除引号内的内容就可以了。因为正常的书写中,应该显式的声明变量。但是玩点花活,也有用eval来创建变量的。所以若没有eval时可以忽略引号中的内容,否则被eval处理的串中的定义也应算。
    再复杂就是写语法分析了,好象又无此必要。
      

  7.   

    呵呵,其实自己写的函数自己还不知道有那些变量吗?而且var出来的变量对外部是没有任何意义的,相当于被private了,从外部访问不到的。不知楼主要这个功能干什么呢?
      

  8.   

    function test(){
    this.val1='a';
    this.val2='b';
    this.val3='c';
    ....
    test(this);
    }
    function test(obj){
     alert(obj.val1);
     alert(obj.val2);
     alert(obj.val3);
    }
      

  9.   

    呵呵,javascript里面不能通过参数个数来区分函数(因为函数都是对象,函数名其实是类名),后定义的同名函数会覆盖原来的。
    而且就算改掉名字了,也只能打出来变量的值。
    而且就算打出来变量的名字了,也打不出来var 产生的内部变量。
    为什么不试验了再帖出来?
      

  10.   

    emu_ston(emu)的代码可以使用try来解决"var a"的问题
    try{eval("alert("+'a'+'"')}catch(X){}
    但是一切所能做的只是通过字符串操作获得一个字符串罢了,字符串操作是最慢的。
      

  11.   

    就是
    var str="var str1='hello';"
    你总不能认为str1也是一个变量吧