2 bjguxiao2008 bjguxiao2008 于 2014.12.15 19:18 提问

js全局变量,为什么总是undefind ,但是alert一下就有数据了

$(function(){
var obj;
var ct;
var movie;
var yuanxian;
var yx_movie;
$.getJSON(encodeURI("<%=basePath%>MapAction!query.action"),
function(data) {
movie = data.movie;//这里有值
});
//alert(movie);//提示undefined
mappic();
tb_yx(movie);如果不alert一下这就是undefind
});

7个回答

sinat_20071089
sinat_20071089   2014.12.29 18:15
已采纳

一楼回答得很好,异步请求就是先不管这个请求(因为这个请求不知道要多少时间,这里要看网速了),所以会直接执行getJSON后面的代码。
我在想如果网速快过计算机的运算速度,会不会这个movie就能拿到值呢。于是我特意去测试了一下,答案是不会
比如:

 var a = new Date().getTime()
console.log('a'+a)
setTimeout(function(){
  var b = new Date().getTime()
  console.log('b'+b)
},1)
var i=0;
while(i<100){
  console.log(i++)
}
edward1253149151
edward1253149151   2014.12.15 19:30

可能是ajax请求根本没执行通过,movie没得到赋值导致movie没有被初始化所以alert是undefind

edward1253149151
edward1253149151   2014.12.16 10:40

@showbo 回答很专业

rui888
rui888   Ds   Rxr 2014.12.16 10:46

alert 之后 有了缓冲时间。你可以改成同步的就没有问题。

sinat_20071089
sinat_20071089   2014.12.29 18:17

var a = new Date().getTime()
console.log('a'+a)
setTimeout(function(){
var b = new Date().getTime()
console.log('b'+b)
},1)
var i=0;
while(i<100){
console.log(i++)
}


sinat_20071089
sinat_20071089   2014.12.29 18:18
 var a = new Date().getTime()
console.log('a'+a)
setTimeout(function(){
  var b = new Date().getTime()
  console.log('b'+b)
},1)
var i=0;
while(i<100){
  console.log(i++)
}
sinat_20071089
sinat_20071089   2014.12.29 18:20

手残了,第一次回答没想到这个排序是这样的

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!