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