如何得到函数体中的所有变量名?

koolfoo 2003-03-07 03:02:58
请教:
假设你这里有段函数代码,
比如:
function xx(){
var va1=0;
var va2=0;
var va3=0
}
但你要得到函数体中的变量名,怎么做?用javascript实现。

我也写了个,但总是出错,并且效率一般。
请帮忙写个效率高并且简短的代码。

感谢。
...全文
63 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
shanxing 2003-03-13
  • 打赏
  • 举报
回复
顶`~~~
emu_ston 2003-03-13
  • 打赏
  • 举报
回复
什么var a的问题?
llrock 2003-03-13
  • 打赏
  • 举报
回复
emu_ston(emu)的代码可以使用try来解决"var a"的问题
try{eval("alert("+'a'+'"')}catch(X){}
但是一切所能做的只是通过字符串操作获得一个字符串罢了,字符串操作是最慢的。
emu_ston 2003-03-13
  • 打赏
  • 举报
回复
呵呵,javascript里面不能通过参数个数来区分函数(因为函数都是对象,函数名其实是类名),后定义的同名函数会覆盖原来的。
而且就算改掉名字了,也只能打出来变量的值。
而且就算打出来变量的名字了,也打不出来var 产生的内部变量。
为什么不试验了再帖出来?
llrock 2003-03-13
  • 打赏
  • 举报
回复
就是
var str="var str1='hello';"
你总不能认为str1也是一个变量吧
李世垚 2003-03-12
  • 打赏
  • 举报
回复
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);
}
emu_ston 2003-03-12
  • 打赏
  • 举报
回复
呵呵,其实自己写的函数自己还不知道有那些变量吗?而且var出来的变量对外部是没有任何意义的,相当于被private了,从外部访问不到的。不知楼主要这个功能干什么呢?
xuzuning 2003-03-08
  • 打赏
  • 举报
回复
这个emu(ston) 的已满足了
只是对
var v='var i=0' // 应该出来v
var v="asdf\";var i=\"0" //应该出来v
会多出 i 来
emu_ston 2003-03-08
  • 打赏
  • 举报
回复
需要考虑的情况远不只一个情形,比如:
var v='var i=0' // 应该出来v
var v="asdf\";var i=\"0" //应该出来v
var v="asdf";var i="0"; //应该出来v和i
...

xuzuning 2003-03-08
  • 打赏
  • 举报
回复
与 emu(ston) 商榷
这个小错是可以排除的:
当 functionObj.toString() 中无“eval(”时,将“"'”间的内容删去再做分析。
如何?

xuzuning 2003-03-08
  • 打赏
  • 举报
回复
我猜想也是。
本来排除引号内的内容就可以了。因为正常的书写中,应该显式的声明变量。但是玩点花活,也有用eval来创建变量的。所以若没有eval时可以忽略引号中的内容,否则被eval处理的串中的定义也应算。
再复杂就是写语法分析了,好象又无此必要。
emu_ston 2003-03-08
  • 打赏
  • 举报
回复
up次数超过3次了就得换ID,没办法
emu_ston 2003-03-08
  • 打赏
  • 举报
回复
呵呵,我就是emu(ston)
emu 2003-03-07
  • 打赏
  • 举报
回复
呵呵,我也写了一个容易出错的,效率应该还将就:

<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>

emu_ston 2003-03-07
  • 打赏
  • 举报
回复
-------------------------------------------------
我也写了个,但总是出错,并且效率一般。
请帮忙写个效率高并且简短的代码。
-------------------------------------------------

???

楼主把你的代码帖出来给大家学习学习?
emu_ston 2003-03-07
  • 打赏
  • 举报
回复
:)

又一颗星星出现了
emu_ston 2003-03-07
  • 打赏
  • 举报
回复
用var定义的话就不能,因为没有从内部遍历自己的方法,而var限定了它的作用域在内部,对外部是不可见的。

除非被定义为外部可访问的属性,才可以通过for遍历到
llrock 2003-03-07
  • 打赏
  • 举报
回复
不会,帮你up
Andyken 2003-03-07
  • 打赏
  • 举报
回复
哇,没见过!关注ing
zhanghk 2003-03-07
  • 打赏
  • 举报
回复
gz
加载更多回复(4)

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧