2011-11-14 102 views
1

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

请问有人能通过它吗?我正在做我的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)); 

我不知道如何读呢!

+0

你究竟在这方面有什么困难?这些不是嵌套功能,我们不会只为你做功课... – Ryan

+2

你究竟知道些什么? –

+0

JS如何给我的数字1和11的值为2 - 我试图读取代码。 – methuselah

回答

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

ask是一个函数,它的一个参数,并执行以下

  • 加入正到它。 +n结束。
  • 将返回值doIt(n+1)添加到它。

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

现在doIt是另一个函数,它接受一个值,并将其年代,但增加了两次。

这给了我们一个总的n + n + n + 1 + 2这是3*(n+1)

例二是作为练习留给读者

+0

因此m被完全忽略了吗? – methuselah

+0

我现在明白了,非常感谢你! – methuselah

+1

@methuselah - no。函数不是“嵌套”的,它们只是函数。 * m *是* doit *的形式参数,它在* ask *中被调用时被赋值为3。 – RobG

1

我会去通过对你是其中之一。

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

这两个函数声明先处理,然后执行代码。 警报显示与括号内传递给它的表达式的结果的对话。 括号中的位调用功能,并将其传递两个值:该函数,以便分配参数的数字2和3

:p被分配值2和q的值指定为3.

线:

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

可以更清楚如下被写入(外括号是冗余的和一个位的空白使得更容易阅读):

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

它关键字返回给调用者(警报),其是p的值加的doit(q + 2) plust q的值的值之后返回值的表达式。

功能DOIT被传递的值q + 2,其中(由于Q被分配值3)为5。

传递给DOIT的第一个值被分配给变量n,并将该值返回n + 1(即在这种情况下为6)。

所以现在return语句问2 + 6 + 3,这是11

最后,11返回到警报并在屏幕上显示出来。