1. 程式人生 > >C和Python程式設計師的JavaScript學習指南(譯)

C和Python程式設計師的JavaScript學習指南(譯)

function treeWalk(branch, visitor){     visitor(branch)     var i // not going to let you forget! you'll thank me later!      for (i in branch.children) {         treeWalk(branch.children[i], visitor)     } } 在這裡,visitor是一個傳遞進來的函式,我們將在以後展示怎麼樣做到。branch是一個使用者定義的物件,我們假設它有一個名叫children的array。 此外,我相信你已經注意到這個不尋常的for結構。這是一個迭代器版本。(**事實上是典型的for each語法規則) 迭代器語法: for (<variable> in <variable of container type>) <statements>

迭代器遍歷容器中的每一項,然而,這是另一個經典的JS令人煩惱的情況,它僅返回每個成員的索引。假如容器是一個有10個元素的array,它可能返回整數0到9(看看下面關於arrays的內容)。假如容器是一個hash-map,它將返回每個key。 這就需要一個額外的,多餘的雜湊查詢過程,因為似乎沒有(就我目前所找到的)對應Python的for(key,value) in container: statements迴圈的語法。

匿名函式是非常明顯的,你僅僅忽略名字。
function(param1, param2 ...) { statements  } 就其本身而言,這是毫無價值的,上面的就是表達一下語法。你可以將整個定義放在任何地方,包括變數賦值(**其實意味著JS中函式是第一類值(first class)),下面的例子是相同的定義一個名為mul的函式。 var mul = function(a,b) { return a*b } 一個不同的例子,用了前面定義的的treeWalk函式:(**即將匿名函式直接作為函式引數傳遞) treeWalk(rootNode, function(item) { logDebug(item) } )