问答详情
源自:1-1 让你认识JS

JS函数,while问题

<script type="text/javascript">
 function fn(a){
        var x=a;
         while (x && x.nodeType!=2){
            x=3;
          }
        return x;
                }
                fn(3);
</script>

这段代码中为何调用函数就报错。先说说我的理解,调用函数设定参数3,并赋值变量x,执行循环while (条件,如果x&& x.nodeType!=2),这里的x=3&&x.nodeType为文本节点 节点属性是3 ,肯定是都不等价于2的,条件正确 ,为什么有报错了呢

提问者:慕粉3361053 2016-08-24 19:19

个回答

  • youli023023
    2016-08-24 19:41:59
    已采纳

    您好,不知道您用的是什么编辑器写代码的,您的这段程序是没有错的但是会令程序陷入死循环。

    while的条件是x && x.nodeType!=2,首先x=3因此为true 其次 x.nodeType!=2返回的结果也是true 

    所以会这段程序会变成一个死循环,据我所知有些编辑器是有死循环检查的功能的,不知道报错是不是因为这个原因。因为我原封不动直接复制代码就导致浏览器崩溃了,所以这段程序是可以执行的。


    希望对你有帮助

  • 慕粉3361053
    2016-08-25 10:47:42

    有点明白啦,就是说,循环条件一直成立,不会执行retrun x 换种说话就是,当循环条件结束时,才会执行return

    x ,返回值到函数,


  • Johnson1602
    2016-08-24 19:40:34

    不太明白楼主的问题,但应该是运算符优先级的问题:!=运算符的优先级高于&&运算符,此时x.nodeType!=2为真,再&&x=3为真,所以while的条件始终为真,会无限循环,导致报错