2011-07-23 81 views
3

我目前正在嘗試學習Javascript並理解函數是語言中最重要的方面之一,但我必須說我發現很難理解它們,尤其是當不同的參數在這裏和在任何地方被使用時。Javascript函數的問題,有人可能會幫助解釋嗎?

我一直在看這個代碼,我讀了另一個堆棧溢出後關閉和不知道如何16提醒,我已經使用console.log來計算出每個點使用什麼值,似乎得到共有17人,有人可能會解釋嗎?

function foo(x) { 
// console.log(x); = 2  
var tmp = 3; 
return function (y) { 
    // console.log(y); = 10 
    alert(x + y + (++tmp)); 
    // console.log(++tmp); = 5? 
} 
} 
var bar = foo(2); 
bar(10); 

如果任何人都可以提供任何有關函數的智慧,可能會使事情開始對我有意義,那將是非常感謝。

凱爾

回答

6

alert()命令確實彈出16.

++tmp是預增量語句 - 第一,它增加的值(從3到4),然後與該行的繼續執行。

因此2 + 10 + 4傳遞給alert()

的警報日誌5下面的console.log(++tmp),因爲tmp變量被再次遞增,從4到5

1

嘗試登錄

console.log(tmp); 

代替

console.log(++tmp); 
1

foo(2)初始化tmp到3和x到2範圍內的返回函數。 bar(10)然後加2,10,結果遞增tmp(從3增加到4後才加到xy)。

所以提醒值將會是2 + 10 + 4的總和。16.

相關問題