第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

大家看看為什么我這個代碼去掉break也不會報錯,按說會陷入死循環(huán)的啊?


<!DOCTYPE HTML>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>無標題文檔</title>

</head>

<body>


<ul id="test">

? ? <li>JavaScript</li>

? ? <li>HTML</li>

</ul>?

?

<script type="text/javascript">


? var otest = document.getElementById("test"); ?

? var li=document.createElement('li');

? li.innerHTML='php';

? var oChild=otest.childNodes;

? for(var i=0;i<oChild.length;i++){

? ? ? if(oChild[i].innerHTML=='HTML'){

? ? ? ? ?otest.insertBefore(li,oChild[i]);

? ? ? ? ?break;

? ? ? }

? ? ? document.write(otest.childNodes.length+',');//沒有break的話是5,5,5,6,6,6,

? ? ??

? ? }

??

</script>?


</body>

</html>


正在回答

3 回答

不會出現(xiàn)死循環(huán) ,當你把?var oChild=otest.childNodes;這句寫出來時,o

oChild已經是一個固定的值存在內存中了,你的otest已經對這個值沒有任何影響了,循環(huán)該到哪里結束哪里結束,

當然如果你直接寫成

? for(var i=0;i<otest.childNodes.length;i++){

? ? ? if(otest.childNodes[i].innerHTML=='HTML'){

? ? ? ? ?otest.insertBefore(li,otest.childNodes[i]);

? ? ? ? ?break;

? ? ? }

? ? ? document.write(otest.childNodes.length+',');//沒有break的話是5,5,5,6,6,6,

? ? }

就知道了,還是會死循環(huán)的呀

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

魔法師李維

我去測試了半天的確是只插入了一次
2016-09-18 回復 有任何疑惑可以回復我~

出現(xiàn)死循環(huán)的可能是在if這里,你插入了兄弟節(jié)點后會改變oChild.length值,這樣每插一次就增加一次,沒完沒了的,但是代碼好像不是這樣執(zhí)行的,

var li=document.createElement('li');

li.innerHTML='php';

這兩句從外面移植到if里,再去掉break就死了 ;這兩句在外面的時候即使沒有break也不會有問題,猜測和insertBefore運行規(guī)則(內存中已經存在某個元素時,只會插入一次,純屬猜想,并不知道是不是這樣的)有關系 !

0 回復 有任何疑惑可以回復我~

怎么會死循環(huán)呢?首先你的oChild.length是3或者5(具體看瀏覽器的不同判定也不同),這里的oChild.length是5;

然后我們來看你的循環(huán)語句,此時oChild.length是5; 由于你加了if判斷語音,導致for循環(huán)到了oChild[i].innerHTML=='HTML'就停止執(zhí)行(break);這個過程這執(zhí)行了三次。所以下面會出現(xiàn)3個5()

把break取消后,?otest.insertBefore(li,oChild[i]);在找到oChild[i].innerHTML=='HTML'插入了兄弟節(jié)點,所以后面會出現(xiàn)三個6(oChild.length由5變成6,)for語句在過程中在此被執(zhí)行了3次;

如果還是不明白,你把

? ? ? document.write(otest.childNodes.length+',');//沒有break的話是5,5,5,6,6,6, ?這段剪切到下面這段中去。就會明白了

?? if(oChild[i].innerHTML=='HTML'){

? ? ? ? ?otest.insertBefore(li,oChild[i]);

? ? ? ? ?break;


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

會飛的辣翔 提問者

出現(xiàn)死循環(huán)的可能是在if這里,你插入了兄弟節(jié)點后會改變oChild.length值,這樣每插一次就增加一次,沒完沒了的,但是代碼好像不是這樣執(zhí)行的, var li=document.createElement('li'); li.innerHTML='php'; 這兩句從外面移植到if里,再去掉break就死了 ;這兩句在外面的時候即使沒有break也不會有問題,猜測和insertBefore運行規(guī)則(內存中已經存在某個元素時,只會插入一次,純屬猜想,并不知道是不是這樣的)有關系 !
2016-09-05 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

大家看看為什么我這個代碼去掉break也不會報錯,按說會陷入死循環(huán)的啊?

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

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

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

公眾號

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