2011-11-14 101 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返回到警報並在屏幕上顯示出來。