javascript常見問題小結

1.執行javascript 操做dom 文檔對象的時候,js 要放在body的下方。
不然會找不到對象!!!!即要先加載dom才能操做dom!
2.操做dom 以後你的dom樹的結構有可能會發生變化,繼續按照原來的操做會報錯!
確認dom 的結構,不要犯錯特別是使用jquery的時候$(this)  $(this).sblings()繼續點下去,要知道本身操做的究竟是哪一個dom 節點。
3.函數加()和不加() 的區別,加()是直接調用這個函數,不加是函數自己,下面看例子。javascript

function func(){

return 1;

}

alert(func);

alert(func());

4.遍歷集合綁定函數html

var list=document.getElemntsByTagName("a");

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

list[i].onclick=function(){

list[i].style.color="fff";//注意執行的時候(點擊元素),選擇的是list[i] 的改變顏色,可是這時候循環早就執行完.

//i的值是list.length,因此你會找不到對象,要用this,還有一些狀況要用到閉包。

}

}

5.一個html 的問題
<div width='100' height='100'></div>和java

<div style="width='100' ;height='100';"></div>區別jquery

html 的角度說不清楚閉包

在js 中,第一個至關於 setAttribute('width',100);dom

第二個 至關於 style.width=100;函數

6.i++的問題this

var i=1;
var b=i++ + ++i;//4
 i=1;
b=(i+1) +  i++;//3       ++i==(i+1),是成立的
重點不是玩什麼i++ ,而是一個i++不是一個運算完成才+1 ,
而是碰到第一個運算符的時候就+ 了1 ,
i++ + 這時候i的值就是2了 ,!!

7.閉包
閉包原理是做用域的規則(下層級能夠訪問上一層級的做用域),再加上一個引用計數(若是被引用就不會被gc回收),使閉包裏面的內容不被回收,達到了保存變量的做用。code

function func(){

var count=1;

return function(){

count+=1;

alert(count);

}

}

//1

var add=func()

add();//2

add();//3

//2

func()();//2

func()();//2

爲何這兩個不一樣?
func(),只被執行了一次。而後執行兩次add(),那count的值就是隻聲明瞭一次。
var add=func(),函數func 只在這裏執行了一次。
下面執行的都是add(),那第二次的count的值是從哪兒來的,沒錯它仍是第一次執行add時,留下來的那個變量。
因爲再次執行add()的時候,再次引用了第一次func()產生的變量count ,因此count沒有被釋放,第一次s(),count 的值爲2,第二次執行add(),count的值再加1,天然就是3了。
第二種,是執行了兩次func(),第二次沒被引用,執行一次就直接釋放掉。因此都是2htm

相關文章
相關標籤/搜索