为什么有些函数可以识别这个全局变量,而另一些函数则不能?



所以我有下面的JS函数,它将行添加到基于全局列表events的表中。事件一开始是空的,我有另一个函数将dict对象推到其中。项目被成功推到列表中,但当events到达fillTable()时,它是空的。在下面的代码中,第一个console.log(events)(在fillTable()内部(打印一个空列表,但第二个console.log(events)按预期打印数据。events在其他地方没有定义,所以我迷失了方向。

events = []
function otherFunction(repo, type, url) {
events.push({'repo': repo, 'type': type, 'url': url})
}
function fillTable() {
console.log(events);         // {}
console.log(events.length);  // 0
var table = document.getElementById("table")
for (let i = 0; i < events.length; i++) {
let event = events[i];
const repo = document.createElement('td')
repo.appendChild(document.createTextNode(event['repo']));
const type = document.createElement('td')
type.appendChild(document.createTextNode(event['type']));

const url = document.createElement('td')
url.appendChild(document.createTextNode(event['url']));
const row = document.createElement('tr')
row.appendChild(repo);
row.appendChild(type);
row.appendChild(url);
table.appendChild(row);
}
}
otherFunction('a', 'b', 'c');
console.log(events);         // {'repo': 'a', 'type': 'b', 'url': 'c'}
console.log(events.length);  // 1
fillTable();

这是异步函数使用中的一个问题。

events = []
getGithubActivity();//this function makes an xmlHttp request
fillTable();//this function is called straight after. There has been no chance for a return of the xmlHttp request.

我建议像这个一样放置fillTable

request.onreadystatechange = function () {
if (request.readyState == 4 && request.status == 200) {
try {
//add events
fillTable();
}
catch (e) {
console.log('getGithubActivity() - Error: ' + e);
}
}
};

当您在控制台中记录对象时。它将在打开时更新,这就是为什么它在您看来是填充的,即使在记录时长度为0。当您在控制台中打开它时,请求已经返回。

我还注意到eventList在任何地方都没有定义,这可能是打字错误吗?

相关内容

  • 没有找到相关文章

最新更新