JavaScript / jQuery中的范围

我显然写了太多的CoffeeScript,因为我现在意识到我对纯JS的范围基本没有了解。

玩了一段时间后,我无法弄清楚以下问题 –

$(document).ready(function() { var myUrl = "http://notimportant.com/" var photos = getPhotos(myUrl); console.log(photos); //undefined }); function getPhotos(url) { var a; $.get(url, function(data) { a = data["photoset"]["photo"]; console.log(a); //my object }); return a; } 

如果我在’var a = data [“photoset”] [“photo”]下面的行上放置一个console.log(a)语句;’ 它表明它正确地提出了我正在寻找的GET请求。 但我发现无法将该对象传递回我的主要代码块,我想在其中操作它。

提前致谢。

photos未定义的原因不是因为范围。 因为$.get是异步执行的。 $.get()返回jqXHR对象而不是HTTP响应。

应该将onSuccess回调传递给getPhotos()以使其正常工作。 或者when().then()构造可以使用。

 $(document).ready(function() { var myUrl = "http://example.com/"; getPhotos(myUrl, renderCatPhotos); }); function getPhotos(url, onSuccess) { $.get(url, onSuccess); } function renderCatPhotos(data) { var a = data.photoset.photo; console.log(a); // a is always available } 

注意:你可能甚至不需要getPhotosfunction。 你可以简单地$.get(url, onSuccess); $(document).ready()

它不是范围问题,它是在$ .get定义之前返回未定义变量的问题。 考虑将照片设为全局照片,然后将其设置在$ .get成功函数中,而不是将其设置为“a”。 在成功function中,您可以向其他function发出调用,以控制显示/处理照片。