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
在第二条评论中为空?从它的外观来看,该函数开始将hash推入一个名为content的NEW变量,而不是引用我在开头明确提出的内容。我该如何解决?为什么javascript范围如此令人困惑。
另外,为了解决这个问题,我是全局变量。为什么我的函数可以在函数的任何地方访问全局变量content
,但在开始函数中调用content
,它将无法访问某些地方。
答案 0 :(得分: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 );
});