我正在尝试传递一个我保存为var的数组。我在父函数中声明了var,并在父函数中添加了arr作为参数。然后我将arr作为回调调用中的参数拉入。 控制台告诉我linksA未定义。
var supportLists = function(selector, arr) {
var parentList = document.getElementById(selector);
var theList = parentList.querySelectorAll("a");
var linksA = [
"http://www.example.com",
"http://www.example.com/path2",
"1",
"2",
"4",
"3",
"5",
"6",
"7"
];
var linksB = [
"1",
"2",
"3"
];
var linksC = [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12"
];
var linksD = [
"1",
"2"
];
var linksE = [
"1",
"2",
"3"
];
var linksF = [
"1",
"2",
"3",
"4",
"5",
"6"
];
var linksG = [
"1",
"2",
"3"
];
var linksH = [
"1",
"2",
"3",
"4"
];
var linksI = [
"1"
];
var linksJ = [
"1",
"2",
"3",
"4",
"5"
];
function processLi(listItems, links) {
for (var i = 0; i < links.length; i++) {
listItems.forEach(function(item, index) {
item.href = links[index];
item.target = "_blank";
});
}
}
processLi(theList, arr);
};
supportLists("support-list", linksA);
supportLists("support-list-b", linksB);
supportLists("support-list-c", linksC);
supportLists("support-list-d", linksD);
supportLists("support-list-e", linksE);
supportLists("support-list-f", linksF);
supportLists("support-list-g", linksG);
supportLists("support-list-h", linksH);
supportLists("support-list-i", linksI);
supportLists("support-list-j", linksJ);
答案 0 :(得分:1)
如果要使用变量,则必须在要使用它的范围内使用它或将其传递给函数(这意味着它必须在该范围或父范围内声明)。
由于您将数组传递给supportLists
函数,因此您必须在该函数之外声明它们。
如果你将所有数组声明移到函数之外,你的代码看起来会像这样(我添加了一些注释来显示作用域的开始位置和结束位置)
// This is the 'parent' scope (probably the global/window scope in your case)
var linksA = [
"http://www.example.com",
// ...
];
// ...
var linksJ = [
"1",
"2",
"3",
"4",
"5"
];
var supportLists = function(selector, arr) {
// Here begins the 'supportLists' function scope
// The 'supportLists' function has access to this scope and the 'parent' scope
var parentList = document.getElementById(selector);
var theList = parentList.querySelectorAll("a");
function processLi(listItems, links) {
// Here begins the 'processLi' function scope
// The 'processLi' function has access to this scope, the 'supportLists' scope and the 'parent' scope
for (var i = 0; i < links.length; i++) {
listItems.forEach(function(item, index) {
// Here begins the 'function(item, index)' function scope
// The 'function(item, index)' function has access to this scope, the 'processLi' scope, the 'supportLists' scope and the 'parent' scope
item.href = links[index];
item.target = "_blank";
});// Here ends 'function(item, index)' function scope
// Back in the 'processLi' function scope
}
} // Here ends the 'processLi' function scope
// Back in the 'supportLists' function scope
processLi(theList, arr);
}; // Here ends the 'supportLists' function scope
// Back in the 'parent' scope
supportLists("support-list", linksA);
supportLists("support-list-b", linksB);
supportLists("support-list-c", linksC);
supportLists("support-list-d", linksD);
supportLists("support-list-e", linksE);
supportLists("support-list-f", linksF);
supportLists("support-list-g", linksG);
supportLists("support-list-h", linksH);
supportLists("support-list-i", linksI);
supportLists("support-list-j", linksJ);
答案 1 :(得分:0)
目前,您的变量是在本地范围内定义的,因此supportLists
函数以外的代码无法看到它们。
<强>解决方案:强>
定义函数外部的变量。例如,
var linksB = ["1", "2", "3"];
var supportLists = function(selector, arr) { //YOUR CODE }