无法在回调函数中访问全局变量?

时间:2017-01-24 11:03:05

标签: javascript jquery html scope

所以我从twitch API中检索了一堆JSON并试图将一些东西附加到div。

HTML:

<div id="streamers" class="streamers">

</div>

JS:

const channels = ["ESL_SC2", "OgamingSC2", "cretetion", "freecodecamp", "storbeck", "habathcx", "RobotCaleb", "noobs2ninjas"];
const streamers = document.getElementById("streamers");
for(let i = 0; i < channels.length; i++) {
  let url = "https://api.twitch.tv/kraken/streams/" + channels[i] + "?client_id=blahblahblahblah&callback=?";

  function callback(data) {
    const li = document.createElement("li");
    li.textContent = channels[i];
    console.log(li);
    streamers.appendChild(li);
  } 

  $.getJSON(url, callback);
}

但是我收到Cannot read property 'appendChild' of null错误。我试过console.log(streamers)但是这会返回null。访问channels没有问题,这也是一个全局变量。

我可以通过将streamers const放入回调函数来轻松解决问题。但我想知道的是为什么我无法在全球范围内访问它?如果我是正确的,函数中未定义的变量将在外部搜索,直到找到匹配为止。

谢谢, 詹姆斯。

1 个答案:

答案 0 :(得分:0)

基于以下定义 “let和const声明定义了作用于正在运行的执行上下文的LexicalEnvironment的变量。”

{{1}}