首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将javascript函数作为参数传递

将javascript函数作为参数传递
EN

Stack Overflow用户
提问于 2013-06-30 05:15:05
回答 4查看 130关注 0票数 2

在使用一些javascript时,我遇到了一些令我困惑的行为,我正在寻找一些文档来解释正在发生的事情。

问题似乎是,根据传递函数的方式,当我认为它们只是参数时,它们可能会被执行。

下面是一个简单的例子:

代码语言:javascript
运行
复制
function f1()
{
    alert('f1');
}
function f2()
{
    alert('f2');
}
function f3(a, b)
{
    alert('f3');
}

上述调用有两个版本:

代码语言:javascript
运行
复制
f3(f1, f2);        // shows 1 alert
f3(f1(), f2());    // shows 3 alerts

第一次调用上面的f3会导致f1和f2函数没有被调用,并且您会收到一个"f3“的警告。第二次调用f3函数时,您会收到关于"f1“、"f2”和"f3“的三个警报。

在实际代码中,我将使用第一个版本,以便f3可以决定是否要调用f1和f2。我花了点功夫才把它弄对。

我没有预料到这种行为,并且认为无论有没有括号,都不会仅仅通过将f1和f2作为参数来调用它们。

再说一次,我正在寻找一些文档来解释这是如何工作的。

EN

Stack Overflow用户

发布于 2013-06-30 05:23:50

你的逻辑令人费解。您正在传递您从未使用过的参数,但让我们面对挑战吧。

您的问题涉及到警报的数量;您正在将参数传递给从不使用它们的函数,然后调用它。所以实际发生的情况是:

代码语言:javascript
运行
复制
function f3(a, b)
{
console.log("argument 1: " + arguments[0]); //Access the arguments fed to the function
console.log("argument 2: " + arguments[1]); 
    alert('f3');
}
*

f3(f1, f2); Pops警报"f3"*

代码语言:javascript
运行
复制
and logs:
argument 1: function f1()
{
    alert('f1');
}
argument 2: function f2()
{
    alert('f2');
}

f3(f1(),f2())

弹出所有警报和日志:

代码语言:javascript
运行
复制
argument 1 undefined
argument 2 undefined
票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17384762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档