JavaScript 中的基本排序

Basic sequencing in JavaScript

本文关键字:排序 JavaScript      更新时间:2023-09-26

我是 JavaScript 的新手,所以请耐心等待...

我有一个链接到我的 HTML 的外部 JavaScript 文档(在 HTML 文档的头部调用)。

在我的 JavaScript 文档中,我在 window.onload 事件上调用了两个函数:

window.onload = function() {
    selected_state();
    viewer();
};
function selected_state() {
    var titleAr = document.getElementsByTagName("title");
    var aAr = document.getElementsByTagName("a");
    // Take the first element of title array. Check if it matches
    // the first element of link array.
    for (i = 0; i <= titleAr.length; i++) {
        for (l = 0; l <= aAr.length; l++) {
            if (titleAr[i].innerHTML === aAr[l].innerHTML) {
                aAr[l].style.color = "#C33";
                break;
            }
        }
    }
};
function viewer() {
    var imgAr = document.getElementsByTagName("img");
    for (var i = 0; i < imgAr.length; i++) {
        imgAr[i].onmouseover = function() {
            this.style.border = "1px solid #CCC";
        }
    }
};​
第一个函数运行

没有问题,但第二个函数不运行。如果我切换它们,所以viewer()是第一位的,那么selected_state()不会执行。我知道这个问题可能是非常简单的逻辑明智......有接受者吗?

当内部循环在外循环的第一次运行时完成时,看起来selected_state正在中断;您的循环条件不正确(必须抛出类似"索引越界"之类的内容)。

数组使用从零开始的索引

改变:

for (i=0; i <= titleAr.length; i++) {
    for (l=0; l <= aAr.length; l++) {

自:

for (i=0; i < titleAr.length; i++) {
    for (l=0; l < aAr.length; l++) {

唯一的解释是,这两个函数在执行任何使您认为它们运行没有麻烦的事情后都会引发异常。除非他们投掷异常,否则首先第一个将运行,然后第二个将运行。您没有遗漏任何基本的逻辑错误。但是,如果第一个函数抛出异常,则会将控制权转移到下一个异常捕获帧,该帧(如果您尚未通过 try...catch 定义一个)将位于代码之外。

最好的办法是使用一个体面的调试器来找出发生了什么。所有主流浏览器现在都内置了不错的调试器。在 IE 和 Chrome 中,按 F12 打开调试器;在其他浏览器中,查看菜单。调试器将有一个"控制台",用于报告错误。还可以设置断点并逐条演练代码语句。


(现在您已经发布了代码进行编辑。

请注意,您在selected_state中的代码是隐式全局的恐怖的牺牲品。您需要声明i并与var l