gpt4 book ai didi

javascript - 声明对象数组时的函数作用域问题

转载 作者:行者123 更新时间:2023-11-30 12:55:00 25 4
gpt4 key购买 nike

这是我目前拥有的代码,发生的一个问题是我无法使用 test() 因为 presets[index].namevalue 在它们的函数范围之外是不可见的,我应该如何在全局范围内声明我的对象数组,以便我能够在其他函数中访问这两个变量?

var presets = [];
var index;

function CreatePresetArray(AMib, AVar) {
var parentpresetStringOID = snmp.getOID(AMib, AVar);
var presetStringOID = parentpresetStringOID;
parentpresetStringOID = parentpresetStringOID.substring(0, parentpresetStringOID.length - 2);
log.error("parentpresetStringOID is " + parentpresetStringOID);

var presetswitches = {};

for (var i = 1; i < 41; i++) {
presets.push(presetswitches);
try {
log.error("presetStringOID before getNextVB= " + presetStringOID);
vb = snmp.getNextVB(presetStringOID);
presetStringOID = vb.oid;
log.error("presetStringOID after getnextVB= " + presetStringOID);

var presetStringVal = snmp.get(presetStringOID);

log.error("presetStringVal= " + presetStringVal);

index = i - 1;

presets[index].name = presetStringOID;
presets[index].value = presetStringVal;
log.error("preset array's OID at position [" + index + "] is" + presets[index].name + " and the value stored is " + presets[index].value);

//log.error("presets Array value ["+index+"] = "+presets[index].configs);

if (presetStringOID.indexOf(parentpresetStringOID) != 0) {
break;
}

} catch (ie) {
log.error("couldn't load preset array " + index);
};
};
}

CreatePresetArray(presetMib, "presetString");

function test() {
for (i = 1; i < 41; i++) {
log.error("test" + presets[index].name + " " + presets[index].value);
};
}
test();

最佳答案

test 函数中的 for 循环遍历 i 但在循环内使用 index。也许你打算使用

for (i = 0; i < 40; i++) { // 1 lower as you were using `index = i - 1` before
log.error("test" + presets[i].name + " " + presets[i].value);
}

重新编写您的代码。我不认为我通过改变赚了那么多钱。如果这不能解决您的问题,请考虑: catch 是否在每次迭代中发生?问题实际上是否来自仅在此处可见的不同方法?此外,考虑在调试时记录整个 presets Array 以查看其外观。

var presets = [];

function CreatePresetArray(AMib, AVar) {
var parentPresetOID, presetOID, presetValue, preset, vb, i;
parentPresetOID = snmp.getOID(AMib, AVar);
presetOID = parentPresetOID; // initial
parentPresetOID = parentPresetOID.substring(0, parentPresetOID.length - 2);

log.error("parentPresetOID is " + parentPresetOID);
presets = []; // empty array in case not already empty
for (i = 0; i < 40; ++i) {
try {
preset = {}; // new object
// new presetOID
vb = snmp.getNextVB(presetOID);
presetOID = vb.oid;
log.error("presetOID after getnextVB= " + presetOID);
// new value
presetValue = snmp.get(presetOID);
log.error("presetValue= " + presetValue);
// append data to object
preset.name = presetOID;
preset.value = presetValue;
// append object to array
presets.push(preset);
// more logging
log.error(
"preset array's OID at position [" + i + "]" +
" is" + presets[i].name + " and " +
"the value stored is " + presets[i].value
);
if (presetOID.indexOf(parentPresetOID) !== 0) {
break;
}
} catch (ie) {
log.error("couldn't load preset array " + i);
if (presets.length !== i + 1) { // enter dummy for failed item
presets.push(null);
}
}
}
}

关于javascript - 声明对象数组时的函数作用域问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19526517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com