2016-10-02 120 views
0
function getContent(type) { 
    var content = []; 
    $.get(`/${type}.json`, function(data) { 
    $.each(data, function(index, hash) { 
     content.push(hash); 
    }); 
    // 1. content = [object, object, etc..] 
    }); 
    // 2. content = [] 
    return content; 
} 

我需要幫助理解這一點。爲什麼content在第二條評論中爲空?從外觀上看,該函數開始將哈希推入一個名爲content的NEW變量,而不是引用我在開始時明確提出的內容。我該如何解決?爲什麼JavaScript範圍如此混亂。爲什麼我的函數沒有返回數組?

此外,要解決這個問題,我全局變量。爲什麼我的函數可以訪問函數中任何位置的全局變量content,但在起始函數中調用content,它將無法訪問某些位置。

回答

1

因爲$.get是異步的。這個調用的本質是它進入事件循環並且不會修改你當前的程序流。

您應該使用回調。

function getContent(type, callback) { 
    var content = []; 
    $.get(`/${type}.json`, function(data) { 
    $.each(data, function(index, hash) { 
     content.push(hash); 
    }); 
    callback(content); 
}); 
} 

getContent("items", function(content) { 
    console.log(content); 
}); 

爲了給你一個更好的例子,你也可以用你的流量,但它應該是這樣的:

function getContent(type, callback) { 
    var content = []; 
    $.get(`/${type}.json`, function(data) { 
    $.each(data, function(index, hash) { 
     content.push(hash); 
    }); 
    callback(); 
    }); 
    return content; 
} 

var items = getContent("items", function() { 
    console.log(items); 
}); 
相關問題