【发布时间】:2011-07-16 05:14:52
【问题描述】:
我需要找到从函数传递给函数的参数。
假设我有一个名为foo的函数:
function foo() {
var a = 3;
var b = "hello";
var c = [0,4];
bar(a - b / c);
bar(c * a + b);
}
function bar(arg) { alert(arg) }
当然,就像现在一样,bar 将始终提醒NaN。
在函数bar 内部,我想以最初传递的形式获取参数。此外,我希望能够从bar 函数访问a、b 和c 的值。换句话说,我想要这种性质的东西:
bar(a - b / c);
function bar() {
//some magic code here
alert(originalArg); //will alert "a - b / c"
alert(vars.a + " " + vars.b + " " + vars.c); //will alert "3 hello 0,4"
}
你可能认为这是不可能的,但我知道你可以用 Javascript 做一些奇怪的事情。例如,可以这样显示调用函数的代码:
function bar() {
alert(bar.caller);
}
我愿意赌几美元,通过某种方式,您可以获得参数的原始形式和参数中变量的值。
如果允许您以这样的形式致电bar,我可以很容易地看到您将如何做到这一点:
bar(function(){return a - b / c}, {a: a, b: b, c: c});
但这太复杂了,因此无法接受。 bar的调用方式不可更改。
【问题讨论】:
-
我愿意在赏金上赌几分,如果不以某种方式改变酒吧,你就无法做到这一点。在你进入 bar 之前,JS 会将 a-b/c 变成一个真实的值,这个值的计算方式将会丢失。 MDN on arguments
-
@Dan F 我会接受你的挑战。我有一个想法,但是涉及到一些非常丑陋的东西和复杂的解析。
-
你在 - 我明天会为你赏金 :-) 不过我给了这个 +1,因为这是一个有趣的问题
-
不,这是真的。编译器会将
a - b * c或任何其他表达式 转换为实际值,然后再将其传递给下一个函数下来。 -
投反对票的人想发表评论吗?
标签: javascript argument-passing