我试着用js & jquery创建一个简单的函数,但是我不能让它工作。
据我所知,当我声明一个没有var的变量时,它是全局的,但我可以将一个变量从jquery回调传递给我的main函数。
function fetchEvents(start,end){
ret = [];
$j.getJSON("index.php?page=agenda_google_ajax&action=list&start="+start+"&end="+end,function(data){
console.log(data); // works ok
ret = data;
});
console.log(ret); // equals [] :'(
return ret;
}发布于 2011-03-29 22:38:56
据我所知,当我用
声明一个变量时,它就变成了全局变量。
事实恰恰相反。如果省略var,该变量将变为全局变量。始终使用var!
从Google JavaScript Style Guide
当您没有指定var时,变量会被放在全局上下文中,这可能会破坏现有的值。此外,如果没有声明,就很难判断变量位于哪个作用域中(例如,它可能位于文档或窗口中,就像在本地作用域中一样容易)。所以一定要用var来声明。
至于你对console.log(ret); // equals [] :'(的问题。
$j.getJSON()不是同步方法调用。该方法异步运行,因此您的代码有效地表明:
ret = [];
console.log(ret);如果在执行getJSON()后需要使用从它返回的数据,可以在回调函数中调用一个方法:
$j.getJSON("index.php?page=agenda_google_ajax&action=list&start="+start+"&end="+end,
function(data){ // this is your callback function
console.log(data); // works ok
doSomething(data); // process the returned JSON
}
});发布于 2011-03-29 22:45:38
您的问题是$.getJSON使用回调,因此当您的fetchEvents函数被调用时,它在回调执行之前返回。
你想做的是在回调中填充/做你想做的事情。
正如您已经指出的,console.log在回调中工作正常
发布于 2011-03-29 22:45:47
看起来你在这里混淆了两个问题。
第一个是var不会创建一个变量gloabl。事实恰恰相反。也就是说,省略var将使变量成为全局变量。
第二个问题是getJSON回调方法不能同步执行。它将在http请求完成后执行。因此,不需要在调用getJSON之后立即将ret设置为该值。
https://stackoverflow.com/questions/5474271
复制相似问题