Javascript-可变可见性

Javascript-可变可见性,javascript,Javascript,嗨,我有以下代码 var idx = 0; var size = 0; do { response.push({ key: "data" + idx, ajaxOptions: function () { var data = this.getPref("groupsCN"); var items = data.split(';'); size = items.length;

嗨,我有以下代码

var idx = 0;
var size = 0;
do {
    response.push({
        key: "data" + idx,
        ajaxOptions: function () {
            var data = this.getPref("groupsCN");
            var items = data.split(';');
            size = items.length;
            idx++;
            alert('inside index: ' + idx + ' < inside length ' + size);
            return {
                url: '/rest/adrestresource/1.0/activedirectory/findgroups&test@lab.local&Bezhesla1&localhost&',
                type: "GET",
                dataType: "xml"
            }
        }
    });
    alert('outside index: ' + idx + ' < outside length ' + size);
} while (idx < size);
var idx=0;
变量大小=0;
做{
响应推送({
键:“数据”+idx,
ajaxOptions:函数(){
var data=this.getPref(“groupsCN”);
var items=data.split(“;”);
尺寸=项目长度;
idx++;
警报('内部索引:'+idx+'<内部长度'+size);
返回{
url:'/rest/adrestresource/1.0/activedirectory/findgroups&test@lab.local&Bezhesla1&localhost&',
键入:“获取”,
数据类型:“xml”
}
}
});
警报('外部索引:'+idx+'<外部长度'+size);
}而(idx
函数
getPref
加载一些值除以
的字符串。主要的一点是遍历所有这些值并对它们进行处理。但是下面的代码输出

外部索引:0<外部长度:0

因此,这意味着变量
idx
size
不会在函数内部修改。但我不知道为什么

我必须在
ajaxOptions->function
内部调用
this.getPref()
,因为它在外部不起作用(我不知道为什么,这个函数是Atlassian gadget JavaScript框架的一部分)

您没有执行函数,您只是将匿名函数分配给对象文本的属性
ajaxOptions
。要执行函数,请使用以下内容:

var idx = 0;
var size = 0;
do {
    response.push({
        key: "data" + idx,
        ajaxOptions: (function () {
            var data = this.getPref("groupsCN");
            var items = data.split(';');
            size = items.length;
            idx++;
            alert('inside index: ' + idx + ' < inside length ' + size);
            return {
                url: '/rest/adrestresource/1.0/activedirectory/findgroups&test@lab.local&Bezhesla1&localhost&',
                type: "GET",
                dataType: "xml"
            }
        })()
    });
    alert('outside index: ' + idx + ' < outside length ' + size);
} while (idx < size);
var idx=0;
变量大小=0;
做{
响应推送({
键:“数据”+idx,
ajaxOptions:(函数(){
var data=this.getPref(“groupsCN”);
var items=data.split(“;”);
尺寸=项目长度;
idx++;
警报('内部索引:'+idx+'<内部长度'+size);
返回{
url:'/rest/adrestresource/1.0/activedirectory/findgroups&test@lab.local&Bezhesla1&localhost&',
键入:“获取”,
数据类型:“xml”
}
})()
});
警报('外部索引:'+idx+'<外部长度'+size);
}而(idx
试着这样做:

var idx = 0; var size = 0; var self = this;


在代码的左边放这么多空格是有原因的吗?格式正确的代码更易于阅读。您从未调用设置
idx
size
的函数。sry,我从IDE复制粘贴了代码,它变得混乱getPref返回什么?在拆分数据之前,您是否确保数据实际上包含字符串?目前尚不清楚
response.push
在做什么,但您传递给
ajaxOptions
的函数可能会在回调中被调用(如果有的话)
idx
size
在函数中被修改,但是
警报在回调之前被调用。这是我第三次或第四次这样说:不要引用你自己的文本。不要将
>
标记放在不是其他地方直接引用的文本前面。你明白我想说什么吗?
var data = function () { return self.getPref("groupsCN"); };