Javascript - 可变可见性

时间:2013-06-19 08:55:36

标签: 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;
            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);

函数getPref加载字符串,其中一些值除以;。重点是迭代所有这些值并用它们做一些事情。但是遵循代码输出

  

外部指数:0&lt;外部长度:0

所以这意味着函数内部没有修改变量idxsize。但我不知道为什么?

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

2 个答案:

答案 0 :(得分:2)

您不是正在执行函数,只是匿名函数分配给对象文字的属性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);

答案 1 :(得分:0)

试试这样:

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

var data = function () { return self.getPref("groupsCN"); };