i++;从JavaScript for循环传递到jQuery(document).ready(function(){在数组上迭代时不作为动态索引使用

i++;从JavaScript for循环传递到jQuery(document).ready(function(){在数组上迭代时不作为动态索引使用,javascript,jquery,namespaces,gpt,google-publisher-tag,Javascript,Jquery,Namespaces,Gpt,Google Publisher Tag,由于我的过失,我不是一名全职的JavaScript实践者,但我正在尝试。下面是我尝试的广告管理名称空间的简化版本,它使用了Google Publisher标记API slots是由googletag.defineSlot()返回的GPT插槽数组,设置在头部,通过将其延迟到jQuery,尝试将仅存在于CMS HTML呈现之后的div作为目标 我如何做到这一点: var i; for (i=0;i<slots.length;i++) { jQuery(document).ready(f

由于我的过失,我不是一名全职的JavaScript实践者,但我正在尝试。下面是我尝试的广告管理名称空间的简化版本,它使用了Google Publisher标记API

slots
是由
googletag.defineSlot(
)返回的GPT插槽数组,设置在头部,通过将其延迟到jQuery,尝试将仅存在于CMS HTML呈现之后的div作为目标

我如何做到这一点:

var i;
for (i=0;i<slots.length;i++) {
    jQuery(document).ready(function() { 
        jQuery('#ads').append('<div id="'+slots[i].getSlotElementId()+'"></div>');
    });
}
这会导致未定义的错误:

console.log('adManager.all_devices.button.slots[i].getSlotElementId());

我一直很困惑,但我很困惑。用温和的话来说,这里发生了什么,我如何修复它?

您的构造错误。您需要连接一次
就绪
侦听器,然后在回调内部执行循环。如下所示:

  jQuery(document).ready(function() {
    for (var i=0;i<slots.length;i++) {
        jQuery('#ads').append('<div id="'+slots[i].getSlotElementId()+'"></div>');
    }
  });
jQuery(文档).ready(函数(){

对于(var i=0;i您的构造错误。您需要附加一次
ready
侦听器,然后在回调内部执行循环。如下所示:

  jQuery(document).ready(function() {
    for (var i=0;i<slots.length;i++) {
        jQuery('#ads').append('<div id="'+slots[i].getSlotElementId()+'"></div>');
    }
  });
jQuery(文档).ready(函数(){


对于(var i=0;我为什么不在处理函数中移动循环?为什么?我的意思是,如果这样做是正确的,那么我完全赞成,但我很好奇为什么它需要这样,是否有一个术语来描述这一点?代码的问题是,每个单独的“就绪”处理程序回调函数共享相同的
i
变量。换句话说,每个函数中的
i
引用的是与您声明的
var i;
非常相同的
。给定的单个变量只能保存一个值。有其他方法可以修复它,但在这种情况下,我不明白您为什么要设置所有这些单独的“就绪”处理程序。好的,很酷,谢谢。我可以搜索什么来阅读更多关于为什么/如何共享相同的
I
变量的信息?我看到了您在我的代码中描述的内容,但我想了解更多(我觉得这似乎不符合逻辑)为什么不在处理函数中移动循环?为什么?我的意思是,如果这样做是正确的,那么我完全赞成,但我很好奇为什么它需要这样,有没有一个术语来描述这一点?代码的问题是,每个单独的“就绪”处理程序回调函数共享相同的
i
变量。换句话说,每个函数中的
i
引用的是与您声明的
var i;
非常相同的
。给定的单个变量只能保存一个值。有其他方法可以修复它,但在这种情况下,我不明白您为什么要设置所有这些单独的“就绪”处理程序。好的,很酷,谢谢。我可以搜索什么来阅读更多关于为什么/如何共享相同的
I
变量的信息?我看到了您在我的代码中描述的内容,但我想了解更多(我觉得这似乎不符合逻辑)为什么这是必要的?有没有一个术语来描述我为什么要用我以前的方式来处理这个问题?因为
ready
listener是异步的,但是
for
循环是同步的。我没有时间解释这么广泛的问题。另一个简单的原因是,您只需要检查文档是否准备好一次。它的回调用于包含要运行的其余代码。@Andy这是另一个原因吗?还是MysterX上面给出的部分原因?我的意思是,在document.ready上循环是毫无意义的,正如您所说的,我明白了,但另外,使用
I
there不起作用的原因是因为jQuery将函数排队等待document已经准备好了,并且不会接受异步系统中的同步内容。是这样吗?好的,我会花一些时间通读一遍,并从中探究为什么有必要这样做?是否有一个术语描述了为什么我以我这样做的方式制造问题?因为
ready
侦听器是异步的,但是
for
循环是同步的。我没有时间解释这么多。另一个更简单的原因是,您只需要检查文档是否准备好一次。它的回调用于包含您要运行的其余代码。@Andy这是另一个原因吗?还是MysterX上面给出的部分原因?我的意思是,在文档上循环。准备好了就是poin毫无疑问,正如您所说,我明白了这一点,但另外,使用
I
there不起作用的原因是,jQuery会在文档准备就绪时对函数进行排队,并且不会接受异步系统中的同步内容。对吗?好的,我会花一些时间通读,并从中进行探索