我正在制作一个关于YouTube视频的数千个格式的程序。格式化粗略数字的功能正常。我的问题是通过匿名函数设置格式化的数字。这是我正在尝试的......
function main(arg){
var viewCount = new Array();
for(var i=0; i < arguments.length; i++){
var viewCount = Format(document.getElementsByClassName(arguments[i])[i].textContent);
// (function(){document.getElementsByClassName(arguments[i])[i].innerHTML = viewCount[i]})();
}
}
现在,这是一件棘手的事情。在Firebug上调试它,当我删除匿名函数的注释时,甚至var viewCount都会收到一条错误,说“ReferenceError:引用未定义的属性参数[i]”。但是当它回复时,它会按预期设置。
这是我完成的一个完整的测试平台:http://pastebin.com/JRPRQnv6
答案 0 :(得分:2)
arguments
[MDN]是每个函数中的一个特殊变量。您没有将任何参数传递给匿名函数,因此它是一个空对象。
如果要从外部函数访问arguments
对象,则必须存储对它的引用。
示例:
function main(arg){
var viewCount = new Array();
var args = arguments;
for(var i=0; i < arguments.length; i++){
var viewCount = Format(document.getElementsByClassName(arguments[i])[i].textContent);
(function(){
document.getElementsByClassName(args[i])[i].innerHTML = viewCount[i];
})();
}
}
但我没有理由在这里使用立即功能。另一个潜在的问题是您正在访问i
的{{1}}元素,其中.getElementsByClassName
是您的参数的循环索引。 i
甚至可能不会返回这么多元素(即您使用了错误列表的错误索引)。
也许你打算这样做:
.getElementsByClassName