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

Javascript 无法访问回调函数中的全局变量?,javascript,jquery,html,scope,Javascript,Jquery,Html,Scope,因此,我正在从TwitchAPI中检索一堆JSON,并尝试将一些内容附加到div中 HTML: JS: const channels=[“ESL_SC2”、“OgamingSC2”、“cretetion”、“freecodecamp”、“storbeck”、“habathcx”、“RobotCaleb”、“Noobs2 Injas”]; 常量拖缆=document.getElementById(“拖缆”); for(设i=0;i

因此,我正在从TwitchAPI中检索一堆JSON,并尝试将一些内容附加到div中

HTML:


JS:

const channels=[“ESL_SC2”、“OgamingSC2”、“cretetion”、“freecodecamp”、“storbeck”、“habathcx”、“RobotCaleb”、“Noobs2 Injas”];
常量拖缆=document.getElementById(“拖缆”);
for(设i=0;i
但是,我收到一个
无法读取null属性“appendChild”的错误。我尝试了
console.log(拖缆)
,但返回空值。访问
频道
没有问题,这也是一个全局变量

通过将
拖缆
常量放入回调函数,我可以轻松地解决这个问题。但我想知道的是为什么我不能在全球范围内访问它?如果我是正确的,函数中未定义的变量将在外部搜索,直到找到匹配项

谢谢,
詹姆斯。

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

for(让i=0;i
似乎是一个问题。请使用匿名方法尝试一次
$.getJSON(url,函数(数据){const li=document.createElement(“li”);li.textContent=channels[i];console.log(li);streamers.appendChild(li);});
作为测试,如果您尝试在定义拖缆的下一行追加child,(即在函数外部)这是否有效?您是否确保
document.getElementById('streamers')有效
是在id为
拖缆的元素添加到DOM后执行的?@BarryThomas它不。。。Strange@JamesBarrett-可能是Teqchiqe上面提到的。可能将常量拖缆放在文档中。就绪函数将解决此问题
<div id="streamers" class="streamers">

</div>
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);
}
for(let i = 0; i < channels.length; i++) { // it enter's to a new scope