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