我一直在javascript中使用return語句。這是msdn definitionreturn語句是從內部工作到外部工作的嗎?
下面是我寫的一個二進制數轉換爲十進制數的函數:
function bin2dec(num){
**return** num.toString().split('').reverse().reduce(function(preVal, currentVal , iterator){
**return** (currentVal === '1') ? preVal + Math.pow(2, iterator) : preVal;
}, 0);
}
讓我們用5二進制作爲一個例子與Binary5 = 101
所以工作我認爲,無論何時使用return語句,它都會過早地退出當前函數。
這裏我有兩個返回語句,一個在回調函數中。
第一個return語句是在第二行:
return num.toString().split('').reverse() // and then the reduce function w/ a call back.
我相信這個「return」語句正在等待減少函數的返回
該函數的數量,使得一個字符串,然後分割,然後反轉,然後reduce方法遍歷數組。當reduce函數完成時,它返回一個值,然後返回第一個返回值。這裏是關於reduce函數返回值的更多細節。
在回調:
// 101
.reduce(function(preVal, currentVal , iterator){
return (currentVal === '1') ? preVal + Math.pow(2, iterator) : preVal;
}, 0);
它的陣列中的每個部分遍歷,在這種情況下,「返回」是普雷瓦爾除非 currentVal === 1.「返回」值被傳遞給回調並且是preVal的值。對於每個循環,我們將添加並建立在來自pre val的當前val上。當數組中的每個項目都迭代時,return語句就是最終的值。最終的值然後從尚未執行的第一個return語句返回。
我真的迷失在回報聲明有時。我主要試圖檢查我的邏輯在'返回'陳述如何以我描述的方式行事。對於一個快速回顧
首先返回 - 等待一切進行評價,有一個 對象返回。
第二回 - 用於回調,當它完成 迭代,則返回最後一個返回值,則該值是 從最終爆發的功能 第一return語句採取行動。
感謝您的提示。我試圖按照自己的方式清楚地瞭解它的實施情況。我在第一次嘗試時實際上已經有了你的當前代碼,但是想嘗試將它凝聚成一個函數。當插入返回語句以使我的當前版本正常工作時,我有點猜測。我想我的邏輯關於如何兩個返回語句正常工作是正確的,但我只是想檢查我正確思考。 – HelloWorld
@HelloWorld:你的代碼和你的理解都很好。像你一樣使用匿名函數是可以的;只要你保持內部函數小,它不應該傷害可讀性。 –