为了账号安全,请及时绑定邮箱和手机立即绑定

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

正在回答

3 回答

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

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

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


希望对你有帮助

0 回复 有任何疑惑可以回复我~
#1

慕粉3361053 提问者

十分感谢您的回答, 我也觉得这段代码 没有错,但是确实会导致浏览器崩溃, 其实我是好奇有两点,1、是什么原因让他陷入死循环。2、while的条件是x && x.nodeType!=2,首先x=3因此为true 其次 x.nodeType!=2返回的结果也是true ,为什么x=3 和x.nodeType!=2 这个条件是true 为什么呀,他不是条件吗,怎么会变成true
2016-08-24 回复 有任何疑惑可以回复我~
#2

youli023023 回复 慕粉3361053 提问者

当一个变量的值不为0或者false的话就是true,你给x的赋值是3,所以运算结果就是true。然后x.nodeType这个,你试下运行document.write(x.nodeType) 发现输出的结果是undefined,所以就变成了判断'undefined'!=2 这个很明显就是不等于2的,因此也是返回true
2016-08-24 回复 有任何疑惑可以回复我~
#3

慕粉3361053 提问者

非常感谢!
2016-08-24 回复 有任何疑惑可以回复我~
#4

慕粉3361053 提问者 回复 youli023023

有点疑问,当一个变量的值不为0或者false的话就是true这段代码是哪章内容里的, 是while()判断条件中如果变量的值不为0或者false的话就是true,值不为0时是true 这个是固定的吗。还有是false时,如果我调用fn(3)传参,条件设立为,x!=3就是false把。
2016-08-24 回复 有任何疑惑可以回复我~
#5

youli023023 回复 慕粉3361053 提问者

当值不为0或false即视为true大多编程语言都是这样设定的,本课程中好像没有介绍过这个知识点。如果fn(3) 然后判断x!=3此时返回的结果的确是false
2016-08-24 回复 有任何疑惑可以回复我~
查看2条回复

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

x ,返回值到函数,


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

慕粉3361053 提问者

那我可以理解成这样吗,代码写的没有问题,问题出在while条件都成立,会无限循环输出 3333333333 导致报错, 不知道我这样理解对不对。
2016-08-24 回复 有任何疑惑可以回复我~
#2

Johnson1602 回复 慕粉3361053 提问者

while循环的机制是先判断条件是否成立,成立的话执行循环体,执行完之后再回去判断条件是否成立,所以在你写的代码里,会一直执行while循环,但是不会输出x的值(只有在while循环执行完后才会return x,你这样写是不会执行return x的)
2016-08-24 回复 有任何疑惑可以回复我~
#3

慕粉3361053 提问者 回复 Johnson1602

有点明白啦,就是说,循环条件一直成立,不会执行retrun x 换种说话就是,当循环条件结束时,才会执行return x ,返回值到函数,
2016-08-25 回复 有任何疑惑可以回复我~
#4

Johnson1602 回复 慕粉3361053 提问者

对的,只有当循环体运行完之后才会执行下一条语句
2016-08-25 回复 有任何疑惑可以回复我~
查看1条回复

举报

0/150
提交
取消
JavaScript进阶篇
  • 参与学习       468188    人
  • 解答问题       21891    个

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

进入课程

JS函数,while问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信