1

我希望这个问题适合 Stack Overflow。我在网上四处寻找并检查了大量书籍,但无法得到这个问题的答案。

我想使用一些我遇到的 JavaScript(见下文)。我已经在网页中设置了脚本,它工作正常......但是,不是一个有经验的程序员,我不明白它是如何工作的。我做了一些研究,但我仍然无法破解代码中的几个部分。

我知道它会创建一个数组 - 但这是一个多维数组吗?

另外,我不明白为什么在 setTimeout 函数中 'active' 写为 ("+active+") (加号??):

setTimeout("image_rotate("+active+")", 5000);

为什么活动一词的两端都有加号?另外,active不应该是一个数字吗?

谢谢。

 <script type="text/javascript">

 var the_images = [];

 window.onload = function(){

 the_images.push(["http://www.adobe.com", "images/banner_1.jpg",      "Adobe"]);
 the_images.push(["http://www.microsoft.com", "images/banner_2.jpg", "Microsoft"]);
 the_images.push(["http://www.mozilla.org", "images/banner_3.jpg", "Mozilla"]);

 image_rotate(0);
 }

 function image_rotate(active){

 var image_container = document.getElementById("ad");


 image_container.innerHTML = "<a href=\""+the_images[active][0]+"\"><img    src=\""+the_images[active][1]+"\" alt=\""+the_images[active][2]+"\"   title=\""+the_images[active][2]+"\" /></a>";

 active++;

 if(active >= the_images.length){
 active = 0;
 }

 setTimeout("image_rotate("+active+")", 5000);

 }
 </script>
4

4 回答 4

1

在开始修改代码之前,您可能应该尝试阅读一些有关 JavaScript 的教程。这是让 JavaScript 名声不佳的原因之一。它实际上是一种相当深奥和复杂的语言,人们只是“剪切和粘贴”功能造成了很多负面印象。

也就是说,我会帮助你解决你的问题,希望你能更好地理解这段代码。

是的,正在此行上创建一个数组(不,它不是多维的):

var the_images = [];

上面写着“var我要声明一个变量”,the_images是数组的名称,[]称为数组字面量或数组初始值设定项。它正在初始化the_images为一个空数组。(例如,如果您改为编写var the_images = [1,'hello',false];,它将使用三个元素初始化它,一个数字、字符串和布尔值。)

数组有一个调用函数push,可以将元素添加到数组的末尾。所以你会看到你在以下几行中向数组添加元素:

the_images.push(["http://www.adobe.com", "images/banner_1.jpg", "Adobe"]);
the_images.push(["http://www.microsoft.com", "images/banner_2.jpg", "Microsoft"]);
the_images.push(["http://www.mozilla.org", "images/banner_3.jpg", "Mozilla"]);

请注意,您正在向数组中添加数组,这可能是您认为这些数组是多维的(数组的数组在技术上与多维数组不同)的印象。

最后,这一行:

setTimeout("image_rotate("+active+")", 5000);

setTimeout是一个本质上推迟某些东西以供将来执行的函数。从本质上讲,这就是说“image_roate在 5000 毫秒(5 秒)内调用函数”。我想指出,setTimeout强烈建议不要使用(将代码指定为字符串)。

active是一个变量,是的,它恰好存储了一个数字。第一次迭代为 0,第二次为 1,以此类推。在这种情况下,您想知道的加号是执行字符串连接。所以第一次setTimeout被调用,它被调用:

"image_rotate("+active+")"  =>   "image_rotate("+0+")"   =>  "image_rotate(0)"

第二次与

"image_rotate("+active+")"  =>   "image_rotate("+1+")"   =>  "image_rotate(1)"

如果您想查看发生了什么,可以将该值打印到控制台。更改此行:

setTimeout("image_rotate("+active+")", 5000);

对此:

var debugString = "image_rotate("+active+")";
setTimeout( debugString );
console.log( debugString );

然后,如果您检查您的控制台(在 Windows 上为 Ctrl-Shift-J,在 OSX 上为 Ctrl-Option-J),您将看到程序的输出,这有望阐明正在发生的事情。

于 2013-08-27T01:03:33.943 回答
0

看起来“图像”只是数组中的一组值,这些数组被推到另一个数组(the_images[])上。

image_rotate函数接受一个整数/索引,并在适当的位置从该索引中提取图像值the_images[]以创建链接和图像标签(例如,第一个元素是 href,第二个是图像路径等)。

如果索引active大于图像值数组的数量the_images[](将其带回开始/第一个图像),则索引将被递增或设置为 0。

setTimeout是每 5 秒调用一次以保持运行。符号在那里,+因为值/索引被连接到字符串 - 这样 setTimeout 正在调用image_rotate(0)或任何值active

我可能遗漏了一些东西,但这个函数看起来是递归的——它永远在调用自己(或者直到用户离开我猜的页面)。

希望那些对你有帮助。

于 2013-08-27T00:58:50.513 回答
0

the_images 是一个二维数组。如果您使用诸如 chrome 之类的调试工具单步执行每一行并在控制台中查看每个变量的值,您将能够看到代码的工作原理。

setTimeout("image_rotate("+active+")", 5000);

您的 image_rotate 函数采用数字参数。您在 setTimeout 函数中所做的是通过传递参数来调用它。这是附加活动变量值后的实际样子。

setTimeout("image_rotoate(1)", 5000);

(+) 符号用于连接。javascript 自动将活动数字变量转换为字符串。希望这可以帮助

于 2013-08-27T01:01:58.297 回答
0

the_images 是以下形式的多维数组:

[link, src, title]

这些属性在构建 HTML 时使用,例如:

var image = the_images[0]
html = "<a href='" + image[0] + "'><img src='" + image[1] + "' title='" + image[2] + "'></a>"

JavaScript 中的函数setTimeout将函数或字符串作为其第一个参数。如果它传递了一个字符串,它会从字符串中查找函数。传递函数通常被认为是更好的形式。

这是一个稍微改写并使用猫照片的示例:http: //jsfiddle.net/VsJ56/

于 2013-08-27T01:05:24.260 回答