JS函数,while问题

来源:1-1 让你认识JS

慕粉3361053

2016-08-24 19:19

<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的,条件正确 ,为什么有报错了呢

写回答 关注

3回答

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

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

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

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


    希望对你有帮助

    youli0... 回复慕粉3361...

    当值不为0或false即视为true大多编程语言都是这样设定的,本课程中好像没有介绍过这个知识点。如果fn(3) 然后判断x!=3此时返回的结果的确是false

    2016-08-24 20:30:30

    共 5 条回复 >

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

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

    x ,返回值到函数,


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

    Johnso... 回复慕粉3361...

    对的,只有当循环体运行完之后才会执行下一条语句

    2016-08-25 14:25:42

    共 4 条回复 >

JavaScript进阶篇

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

468194 学习 · 21891 问题

查看课程

相似问题