Javascript和Jquery中变量的作用域
我遇到了困扰我的事情。我做的代码如下Javascript和Jquery中变量的作用域,javascript,jquery,json,scope,Javascript,Jquery,Json,Scope,我遇到了困扰我的事情。我做的代码如下 var json=''; function displayThumbnails(list) { json = list; for(var i in list) { var image = $("<img class='item'>").attr("src", list[i].thumbnail); $("#showThumbnails&quo
var json='';
function displayThumbnails(list) {
json = list;
for(var i in list)
{
var image = $("<img class='item'>").attr("src", list[i].thumbnail);
$("#showThumbnails").append(image);
}
}
alert(json);
var-json='';
函数显示缩略图(列表){
json=列表;
用于(列表中的var i)
{
变量图像=$(“
我想问一下,变量json的作用域也在函数之外,但警报显示空白值
当console.log(json)位于函数内部时,将显示结果。函数显示空值后json的作用域不会结束。为什么
应公众要求:D
这是mainpage.php
$(文档).ready(函数(){
var jqxhr=$.get(“php/list.php”,function()){
})
.完成(功能(数据){
var list=JSON.parse(数据);
控制台日志(列表);
显示缩略图(列表);
})
.fail(函数(){
警报(“哦,快照,服务器错误!!!重试”);
location.reload();
});
});
当到达警报(json)
语句时,函数显示缩略图
尚未调用,因此json
的值仍然是'
;当警报(json)到达时
语句到达函数displayThumbnails
尚未调用,因此json
的值仍然是'
;您的变量可以通过函数声明内和声明后的代码访问。另一个答案中提到的问题是,填充变量尚未执行
要确保使用变量的代码仅在填充变量后执行,可以使用回调函数,如下所示:
var json='';
// the second parameter should be a function
function displayThumbnails(list, callback) {
var i, image;
json = list;
for(i in list) {
image = $("<img class='item'>").attr("src", list[i].thumbnail);
$("#showThumbnails").append(image);
}
callback();
}
doSomethingWithYourVariable = function() {
alert(json);
};
// you can pass a callback function either by name,
// then your call then should look similar to this:
displayThumbnails(list, doSomethingWithYourVariable);
// or pass an anonymous callback function:
displayThumbnails(list, function() {
alert(json);
});
有关更详细的介绍,请参见函数声明内的代码和声明后的代码都可以访问变量。正如另一个答案中提到的,这里的问题是,填充变量的代码尚未执行
要确保使用变量的代码仅在填充变量后执行,可以使用回调函数,如下所示:
var json='';
// the second parameter should be a function
function displayThumbnails(list, callback) {
var i, image;
json = list;
for(i in list) {
image = $("<img class='item'>").attr("src", list[i].thumbnail);
$("#showThumbnails").append(image);
}
callback();
}
doSomethingWithYourVariable = function() {
alert(json);
};
// you can pass a callback function either by name,
// then your call then should look similar to this:
displayThumbnails(list, doSomethingWithYourVariable);
// or pass an anonymous callback function:
displayThumbnails(list, function() {
alert(json);
});
有关更详细的介绍,请参见这个JSON从何而来,ajax?因为警报在函数之外,并且在调用函数之前被调用。请将警报放在函数内部。@ShaunakD-您怎么知道,在发布的代码中根本没有函数调用?@adeneo您看到了吗?显示缩略图
没有被调用。@SpencerWieczorek-没有,我写了“没有函数调用…”,所以很明显我没有看到函数调用,但是OP写了“当console.log(json)在函数结果中时”",所以它在某个地方被调用,但谁知道在哪里?这个JSON从哪里来,ajax?因为警报在函数之外,并且在调用函数之前被调用。将警报放在函数内部。@ShaunakD-你怎么知道,在发布的代码中根本没有函数调用?@adeneo你看到了吗?displayThumbnai没有调用ls
。@SpencerWieczorek-没有,我写了“没有函数调用…”,所以很明显我没有看到函数调用,但OP写了“当console.log(json)在函数中时,结果显示”,所以它在某个地方被调用,但谁知道在哪里呢?如何解决这个问题。我还面临这样的问题:AJAX调用运行异步,而依赖它的rest脚本最终会有null或空值。我了解到,这可以通过使call Async:false来实现,这是一种糟糕的编码实践。此外,它是否应该遵循正确的编码方法运行时自上而下的流就像其他HTML和js文件一样,它只是一个函数声明,函数中的任何代码都不会执行,直到从其他地方调用displayThumbnails
。如何解决这个问题。我还面临这样的问题,AJAX调用运行异步脚本和具有依赖关系的rest脚本我了解到,这可以通过调用async:false来实现,这是一种糟糕的编码实践。此外,如果它在运行时不像其他HTML和js文件那样遵循正确的自上而下的流程,那么它只是一个函数声明,函数中的任何代码在displayThum之前都不会执行bnails
是从其他地方调用的。嘿@Kevin Busse,我刚刚开始编写代码。我不知道callback();我可以在某个地方读一下这个链式调用吗?这个术语在AJAX中也经常使用。我想要一个文档来解释为什么称为回调,以及如何在AJAX之外使用回调。你可以用它来做调用链式连接,或者将控制权交还给异步调用的位置。因为每个AJAX调用都是异步的,所以在那里经常使用它我会相应地更新我的答案。有关回调的一般介绍,请参阅:嘿@Kevin Busse,我刚刚开始编写代码。我不知道回调();我可以在某个地方读一下这个链式调用吗?这个术语在AJAX中也经常使用。我想要一个文档来解释为什么称为回调,以及如何在AJAX之外使用回调。你可以用它来做调用链式连接,或者将控制权交还给异步调用的位置。因为每个AJAX调用都是异步的,所以在那里经常使用它我将相应地更新我的答案。有关回调的一般介绍,请参阅:
jQuery.get('list.php', function(data) {
// this already is an asynchronous callback function
// that will be called when the request completes
});
// code here would be called immediately
// the request will most likely not be completed and no data available