JS關(guān)于函數(shù)的問題,
9-11章 訪問兄弟節(jié)點(diǎn),斷斷續(xù)續(xù)弄了好幾天沒搞懂,有幾個(gè)點(diǎn),需要大家解惑
?function fn(a){
??????? var x=1;
???????? while (x && x.nodeType!=1){
??????????? x=3;
????????? }
??????? return x;
??????????????? }
??? fn(4);這段代碼,和下面的代碼,
function?get_nextSibling(n){
????????var?a=n.nextSibling;
????????while?(a?&&?a.nodeType!=1){
???????????a=a.nextSibling;
????????}
????????return?a;
????}
如果把獲取兄弟節(jié)點(diǎn)改成number數(shù)字,來寫的話, 1、第一段代碼中的運(yùn)行原理和第二段相同么。2、第一段代碼運(yùn)行不了,服務(wù)器崩潰,問題出在哪里。3??
var x=1;
???????? while (x && x.nodeType!=1){
??????????? x=3;
????????? }
??????? return x;和
? var?a=n.nextSibling;
????????while?(a?&&?a.nodeType!=1){
???????????a=a.nextSibling;
????????}
????????return?a;
中,已經(jīng)申明了局部函數(shù),并進(jìn)行了初始化 賦值,那while里的 ? x=3;和a=a.nextSibling;又是什么意思 ,我覺得 應(yīng)該是執(zhí)行while循環(huán),如果條件成立,那么將變量 重新賦值,但是,第一種 運(yùn)行不了,第二種我還沒看懂。求各位大大科普
2016-08-24
ok.
2016-08-24
第一段代碼你給x賦值之后他不就是文本節(jié)點(diǎn)了么,總之肯定不是元素節(jié)點(diǎn),所以x的nodeType肯定不是1,那么只要x不是0,這個(gè)循環(huán)就會(huì)永遠(yuǎn)持續(xù)下去,而事實(shí)上他也確實(shí)不會(huì)為0,這是一個(gè)死循環(huán);
第二段代碼段的意義是為了找出n的下一個(gè)元素節(jié)點(diǎn)。默認(rèn)傳入的參數(shù)n是一個(gè)節(jié)點(diǎn),那么進(jìn)來之后先將n的下一個(gè)節(jié)點(diǎn)賦給a,而n的下一個(gè)節(jié)點(diǎn)a可能是屬性、可能是文本、也可能是元素,還可能是空的,這就需要進(jìn)入循環(huán)進(jìn)行判斷找出下一個(gè)元素節(jié)點(diǎn)。a&&a.nodetype!=1是指,如果a不為空且a的節(jié)點(diǎn)類型不為1時(shí),進(jìn)入循環(huán)(元素節(jié)點(diǎn)的節(jié)點(diǎn)類型才是1),一直往下循環(huán),直至找到一個(gè)元素節(jié)點(diǎn),并將其作為返回值。
這一段基礎(chǔ)內(nèi)容在9-7章,需要好好看一下。