Javascript数组问题:无法读取属性'src'的定义

Javascript array problem: Cannot read property 'src' of undefined

本文关键字:src 定义 属性 读取 问题 数组 Javascript      更新时间:2023-09-26

这个脚本已经在waterbirds.org上运行多年了。现在由于某种原因它坏了。它抛出了一个"无法读取属性'src'的未定义"错误,我已经追踪到preLoad[j]。src (runSlideShow函数的第一行)作为问题,因为我可以把一个图像链接地址在那里,它的工作。知道是什么引起了这个问题吗?

// Waterbird Society Theme for Wordpress
// Rotating image banner applet
//
// Usage:
//<body onLoad='rotate_banner(slideShowSpeed, "Image1.jpg", "Image2.jpg"...)'>

var slideShowSpeed;
var j = 0;
var p;
var preLoad = new Array();
function rotate_banner() {
    var args = rotate_banner.arguments;
    slideShowSpeed = Number(args[0]);
    p = args.length;
    for (i = 0; i < p-1; i++) {
        preLoad[i] = new Image();
        preLoad[i].src = args[i+1];
    }
    runSlideShow();
}
function runSlideShow() {
    document.images['SlideShow'].src = preLoad[j].src;
    j++;
    if (j > (preLoad.length - 1)) j = 0;
    t = setTimeout('runSlideShow()', slideShowSpeed*1000);
}

你的代码一切正常,除了它是全局运行的,所以所有的var声明都创建了全局变量。

waterbirds.org上确切的问题是,j变量在之前某个地方是有定义的,到preLoad[j]的时候,j等于96,而preload[96]实际上是没有定义的。

在匿名自执行函数中包装你的横幅,例如,使vars本地化,你就完成了:

(function(){
var slideShowSpeed;
var j = 0;
var p;
var preLoad = new Array();
// to keep rotate_banner global, save it as a property of window object
window.rotate_banner = function() {
    var args = rotate_banner.arguments;
    slideShowSpeed = Number(args[0]);
    p = args.length;
    for (i = 0; i < p-1; i++) {
        preLoad[i] = new Image();
        preLoad[i].src = args[i+1];
    }
    runSlideShow();
}
function runSlideShow() {
    document.images['SlideShow'].src = preLoad[j].src;
    j++;
    if (j > (preLoad.length - 1)) j = 0;
    t = setTimeout('runSlideShow()', slideShowSpeed*1000);
}
})()

并且记住:全局变量是邪恶的!div =)