Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
函数外部的Javascript变量_Javascript_Variables_Scope - Fatal编程技术网

函数外部的Javascript变量

函数外部的Javascript变量,javascript,variables,scope,Javascript,Variables,Scope,初学者试图将我的头脑集中在javascript和我遇到的范围问题上 我正在提取一些json数据并将其放入一个名为zero[]的数组中。。让它在匿名函数之外工作失败 如何使zero[]在函数外部工作 <script> var addr = "data657"; var zero = []; var full = []; $(function(){ jQuery.getJSON('https://jsondataurl.com/'+addr, function(res

初学者试图将我的头脑集中在javascript和我遇到的范围问题上

我正在提取一些json数据并将其放入一个名为zero[]的数组中。。让它在匿名函数之外工作失败

如何使zero[]在函数外部工作

<script>


 var addr = "data657";


 var zero = [];
 var full = [];

$(function(){


jQuery.getJSON('https://jsondataurl.com/'+addr, function(result) {


    if (result == 0)
     zero.push(addr);
if (result > 0)
     full.push(addr); 

var j = Math.floor(Math.random()*4); 



     alert(zero[j]);    /// works great here  !!!
});
});


alert(zero[j]); // DOES NOT work here



  $("#foo").attr("data-stuff", zero[j]);  // DOES NOT work here 


 </script>    

var addr=“data657”;
零风险值=[];
var full=[];
$(函数(){
jQuery.getJSON('https://jsondataurl.com/'+addr,函数(结果){
如果(结果==0)
零推力(addr);
如果(结果>0)
全推(addr);
var j=数学地板(数学随机()*4);
警惕(零[j]);///在这里非常有效!!!
});
});
警报(零[j]);//这里不行
$(“#foo”).attr(“数据素材”,zero[j])//这里不行

在范围内。变量还没有被填充<代码>j恰好不在范围内


您想对回调中的数据执行的任何操作都必须在回调中完成。

嘿,它是外部的,而不是内部的任何函数,您不能像zero[j]那样使用,而是try zero[1]意味着您必须通过参考号警报(zero[0]);只需传递变量而不是reference@Quentin这里的问题不同。这个问题与Ajax调用无关。这不是一个重复的问题。@vivek_ganesan-是的,它是-
getJSON
进行Ajax调用。(第二个问题是,
j
超出范围,但当代码被重写以说明异步时,它就会消失,因为该范围将不再使用)。@Quentin。。但问题的关键不在于Ajax调用。代码中的错误与变量作用域有关。不,请看问题“我如何才能使zero[]在函数外部工作?”-访问
zero
没有范围问题,只是对Ajax引起的问题进行计时。嗯,我可以在函数外部定义j吗?就像我第一次在下面写“var zero=[];”