难以理解以下功能结构

时间:2011-11-14 00:37:33

标签: javascript

大家好,我很难理解以下功能结构。

请问有人带我走过吗?我正在将其作为我的JS课程的一部分。

我已经测试了这些函数并看到了输出,但我不确定JS是如何得出这个结论的。

提前致谢。

// 1号

function doit(m){
    return(m+2);
}
function ask(n){
    return(n+doit(n+1)+n);
}
alert(ask(2));

// 2号

function doit(n){
    return(n+1);
}
function ask(p,q){
    return(p+doit(q+2)+q);
}
alert(ask(2,3));

我不知道该怎么读!

2 个答案:

答案 0 :(得分:3)

function doit(m){
    return(m+2);
}
function ask(n){
    return(n+doit(n+1)+n);
}
ask(2);

ask是一个函数,它接受一个参数并执行以下操作

  • 添加n。最后+n
  • doIt(n+1)的返回值添加到其中。

因此我们有n + n + doIt(n+1)

现在doIt是另一个函数,它接受一个值并返回它,但递增两次。

这为我们提供了总共n + n + n + 1 + 2 3*(n+1)

示例二留给读者练习

答案 1 :(得分:1)

我会为你找一个。

> function doit(n){
>    return(n+1);
> }
> function ask(p,q){   
>    return(p+doit(q+2)+q);
> }
> alert(ask(2,3));

首先处理两个函数声明,然后执行代码。 alert 显示与括号之间传递给它的表达式结果的对话框。 括号中的位调用 ask 函数并将其传递给两个值:数字2和3。

ask 函数按顺序分配参数:p被赋值为2,q被赋值为3.

该行:

return(p+doit(q+2)+q);

可以更清楚地写成如下(外括号是多余的,一些空格使其更容易阅读):

return p + doit(q + 2) + q;

它将关键字返回之后的表达式返回给调用者( alert ),这是p的值加上doit(q + 2)的值。 q的价值。

函数 doit 传递值q + 2,其中(因为q被赋值为3)为5。

传递给 doit 的第一个值被赋值给变量n,并返回值n + 1(在这种情况下为6)。

现在询问中的return语句是2 + 6 + 3,即11。

最后,11返回 alert 并显示在屏幕上。