javascript中arguments,callee,caller

本文通过一个具体的JavaScript示例介绍了如何在不同函数间传递参数,并展示了如何使用arguments对象来获取传递给函数的参数。此外,还探讨了如何利用callee和caller属性追踪函数调用堆栈。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在IE中,可以通过event或window.event获得全局event;而在其他浏览器中,则通过 arguments[arguments.length-1]可获得event实例。但是如果是嵌套调用,如:用户触发事件调用functionA,而 functionA又调用functionB,再由functionB调用functionC,此时如果functionB或functionC中需要获 得event实例,IE仍可通过event或window.event获得,而其他浏览器通过arguments[arguments.length- 1]就无法获得了,通常习惯的做法是把event作为参数传递到functionB及functionC中.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<head>
<title>关于arguments,callee,caller等的测试 </title>
<meta http-equiv="content-type" content="text/html;" />
</head>
<body>
<script type="text/javascript">
function testArg() {
var sTemp = "test()开始执行\n\n函数定义的正文:\n\n";
sTemp
+= arguments.callee + "\n\n";
sTemp
+= "传入参数的长度:\n";
sTemp
+= arguments.length + "\n\n";
sTemp
+= "传入参数的内容:\n";
for (var i = 0; i < arguments.length; i++) {
sTemp
+= arguments[i] + "\n";
}
sTemp
+= "\n点击确定,开始调用a();";
alert(sTemp);
a(arguments);
}
function a(args) {
var sTemp = "a()开始执行\n\n函数定义的正文:\n\n";
sTemp
+= arguments.callee + "\n\n";
sTemp
+= "传入参数的长度:\n";
sTemp
+= arguments.length + "\n\n";
sTemp
+= "传入参数的内容:\n";
for (var i = 0; i < arguments.length; i++) {
sTemp
+= arguments[i] + "\n";
}
sTemp
+= "\n当前函数的调用者:\n";
sTemp
+= arguments.callee.caller + "\n\n";
sTemp
+= "\n点击确定,开始调用b();";
alert(sTemp);
b(args);
}
function b(args) {
var sTemp = "b()开始执行\n\n函数定义的正文:\n\n";
sTemp
+= arguments.callee + "\n\n";
sTemp
+= "传入参数的长度:\n";
sTemp
+= arguments.length + "\n\n";
sTemp
+= "传入参数的内容:\n";
for (var i = 0; i < arguments.length; i++) {
sTemp
+= arguments[i] + "\n";
}
sTemp
+= "\n当前函数的调用者:\n";
sTemp
+= arguments.callee.caller + "\n\n";
sTemp
+= "\n点击确定,开始调用c();";
alert(sTemp);
c(args);
}
function c(args) {
var sTemp = "c()开始执行\n\n函数定义的正文:\n\n";
sTemp
+= arguments.callee + "\n\n";
sTemp
+= "传入参数的长度:\n";
sTemp
+= arguments.length + "\n\n";
sTemp
+= "传入参数的内容:\n";
for (var i = 0; i < arguments.length; i++) {
sTemp
+= arguments[i] + "\n";
}
sTemp
+= "\n当前函数的调用者:\n";
sTemp
+= arguments.callee.caller + "\n\n";
alert(sTemp);
alert(
"args.callee:\n" + args.callee);
alert(
"args.callee.caller:\n" + args.callee.caller);
alert(
"testArg.arguments.callee.caller:\n" + testArg.arguments.callee.caller);
}
;
</script>
<input type="button" onclick="testArg('iecn.net','深蓝蝴蝶','枫岩');" value="testArg('iecn.net','深蓝蝴蝶','枫岩');" />
</body>
</html>

转载于:https://www.cnblogs.com/shikyoh/archive/2011/05/10/2042370.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值