2014-02-23 32 views
0

http://jsfiddle.net/JonnyD/H2Dpe/3/爲什麼JavaScript將源代碼文本傳遞給參數?

控制檯日誌:

[Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object] 
    (index):104 

    function (newFeedItems) { 
     console.log(feedItems); 
    } (index):113 

    Uncaught TypeError: Object function (newFeedItems) { 
     console.log(feedItems); 
    } has no method 'sort' 

它在哪裏,從得到這個?

function (newFeedItems) { 
    console.log(feedItems); 
} (index):113 

時,它應該是:

[Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object] 

在功能fetchFeeds()processLatestFeed()看一看。這個問題在processLatestFeed(function(newFeedItems) {

function fetchFeeds() { 
    fetchVideos(function(newVideoItems) { 
     fetchPodcasts(function(newPodcastItems) { 
      var newFeedItems = newVideoItems.concat(newPodcastItems); 
      console.log(newFeedItems); 
      processLatestFeed(function(newFeedItems) { 
       console.log(feedItems); 
      }); 
     }); 
    }); 
} 

function processLatestFeed(newFeedItems, callback) { 
    console.log(newFeedItems); 
    newFeedItems.sort(function(a,b) {return (a.date > b.date) ? -1 : ((b.date > a.date) ? 1 : 0);}); 

    for (i in newFeedItems) { 
     var newItem = newFeedItems[i]; 

     if (!isItemInFeed(newItem)) { 
      feedItems.push(newItem); 
     } 

     if (feedItems.length == 50) { 
      break; 
     } 
    } 

    callback(); 
} 
+1

你可以進一步描述你的問題嗎?我不認爲我正確理解你想說什麼 –

+0

@ZachSaucier看到newFeedItems以及它如何記錄到控制檯,你可以看到它是如何正確顯示它是一個對象數組[Object,Object,Object .. ..]然而,當newFeedItems被傳遞到processLatestFeed(function(newFeedItems)...它似乎不是以對象數組的形式傳入,而是作爲源代碼本身傳遞的(請參閱控制檯日誌的第二部分) – Jonathan

+1

不確定如果我明白了,但改變了這一點: processLatestFeed(newFeedItems,function(){ console.log(feedItems); }); – juvian

回答

1

開始你傳入一個函數作爲第一個參數processLatestFeed

processLatestFeed(function(newFeedItems) { 
    console.log(feedItems); 
}); 

但是你定義的函數來接受陣列作爲第一個參數,回調爲參數:

function processLatestFeed(newFeedItems, callback) { 
    console.log(newFeedItems); // <- this logs the function source 
    // ... 
} 

所以你必須調用函數爲

processLatestFeed(newFeedItems, function() { 
    // you are not passing an arguments to the callback 
}); 
+0

即時通訊一整天都在玩JavaScript - 想想我的提示休息一下:) – Jonathan

+0

是的,這經常幫助:) –

相關問題