JS关于函数的问题,

来源:1-1 让你认识JS

慕粉3361053

2016-08-24 08:49

9-11章 访问兄弟节点,断断续续弄了好几天没搞懂,有几个点,需要大家解惑

 function fn(a){
        var x=1;
         while (x && x.nodeType!=1){
            x=3;
          }
        return x;
                }
    fn(4);

这段代码,和下面的代码,

function get_nextSibling(n){

        var a=n.nextSibling;

        while (a && a.nodeType!=1){

           a=a.nextSibling;

        }

        return a;

    }

如果把获取兄弟节点改成number数字,来写的话, 1、第一段代码中的运行原理和第二段相同么。2、第一段代码运行不了,服务器崩溃,问题出在哪里。3  

var x=1;
         while (x && x.nodeType!=1){
            x=3;
          }
        return x;

  var a=n.nextSibling;

        while (a && a.nodeType!=1){

           a=a.nextSibling;

        }

        return a;

中,已经申明了局部函数,并进行了初始化 赋值,那while里的   x=3;和a=a.nextSibling;又是什么意思 ,我觉得 应该是执行while循环,如果条件成立,那么将变量 重新赋值,但是,第一种 运行不了,第二种我还没看懂。求各位大大科普

写回答 关注

2回答

  • Momoooo
    2016-08-24 10:15:47

    ok.

  • Sergio7
    2016-08-24 10:13:44

    第一段代码你给x赋值之后他不就是文本节点了么,总之肯定不是元素节点,所以x的nodeType肯定不是1,那么只要x不是0,这个循环就会永远持续下去,而事实上他也确实不会为0,这是一个死循环;

    第二段代码段的意义是为了找出n的下一个元素节点。默认传入的参数n是一个节点,那么进来之后先将n的下一个节点赋给a,而n的下一个节点a可能是属性、可能是文本、也可能是元素,还可能是空的,这就需要进入循环进行判断找出下一个元素节点。a&&a.nodetype!=1是指,如果a不为空且a的节点类型不为1时,进入循环(元素节点的节点类型才是1),一直往下循环,直至找到一个元素节点,并将其作为返回值。

    这一段基础内容在9-7章,需要好好看一下。

    Sergio... 回复慕粉3361...

    因为n可能是最后一个节点,后面没有节点了,那么通过nextSibling方法就会返回null。 属性节点就像class,href这样的在标签后面这种,在DOM中也是节点。另外你好像把a&&a.nodeType!=1的运算顺序弄错了,是先分别判断a和a,nodeType!=1的真假,再进行&&的真假判断。

    2016-08-28 09:22:20

    共 3 条回复 >

JavaScript进阶篇

本课程从如何插入JS代码开始,带您进入网页动态交互世界

468192 学习 · 21891 问题

查看课程

相似问题