亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

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進階篇
  • 參與學習       468834    人
  • 解答問題       22582    個

本課程從如何插入JS代碼開始,帶您進入網頁動態交互世界

進入課程

JS函數,while問題

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號