1IE跟DOM事件流有什么區別
① 闡述事件綁定方式:
IE9以前:attachEvent(“onclick”)、detachEvent(“onclick”)
IE9開始跟DOM事件流是一樣的,都是addEventListener
② 這兩種綁定方式的區別:
寫法上的區別:
attachEvent兩個參數、事件帶on
addEventListener 三個參數、事件不帶on、true/false表示捕獲/冒泡
功能上的區別:
attachEvent綁定的事件全部冒泡、addEventListener根據第三個參數是true還是false決定冒泡還是捕獲。
③ 事件冒泡和事件捕獲。
冒泡: 當觸發一個事件時,會從當前節點開始,依次觸發其祖先節點的同類型事件。
捕獲: 從根節點開始,依次觸發其祖先節點同類型事件,直到節點自身。
2IE和標准下有哪些兼容性的寫法?
ev = e || window.event;//獲取事件對象(事件因子):
DOM2添加事件: if(dom.attachEvent){
Dom. attachEvent(“onclick”,function);
}else{
Dom. addEventListener(“click”,function);
}
取消事件冒泡: if (e.stopPropagation) {
e.stopPropagation(); //IE以外
} else {
e.cancelBubble = true; //IE8之前
}
取消默認事件:if (e.preventDefault) {
e.preventDefault(); //IE以外
} else {
e.returnValue = false; //IE
}
3API是啥?
API(Application Programming Interface,應用程序編程接口)是一些預先定義的函數,目的是提供應用程序與開發人員基於某軟件或硬件得以訪問一組例程的能力,而又無需訪問源碼,或理解內部工作機制的細節。
在編程語言中,API通常指語言中內置的函數、接口、類等系統工具。我們編程人員無需關心這些函數的實現細節,只需要按照API文檔的要求,給函數傳入指定參數接受返回值即可。
在前后台傳遞數據,API也是后台提供給前台的接口,前台只需要按照要求請求接口並發送指定參數,結課接受JSON字符串。例如:https://api.douban.com/v2/book/1220562
4Javascript事件處理器在線程空閑之前不會運行是什么意思?
JS是一個單線程應用,也就是說,當某一段代碼正在執行的時候,其他代碼如果需要執行也必須等到這個線程結束后,才能執行。
for(var i=1;i<=3;i++){ setTimeout(function(){ console.log(i); },0); };
代碼執行到for循環時,當for循環執行第一次,遇到第一個setTimeout時並不會立即觸發,因為for循環還有結束,現在的線程被for循環阻塞。setTimeout必須等到for循環的線程結束以后,也就是線程空閑之后,才能執行,而這時候i已經變成了4.
所以最終打印三個4. 解決的辦法可以將var改成let,或者for循環中嵌套自執行函數
5js中callee和caller的作用
寫法不同:
callee是Arguments的一個屬性,在函數中使用Arguments.callee調用。
Caller在函數中,直接使用函數名調用。 Func. Caller
功能不同:
Arguments.callee 返回的是,當前函數自身的引用!!
Func. Caller 返回的是,當前函數在哪個函數中調用。 如果函數是頂層調用,則返回null
function func(){
console.log(func.caller);
}
func(); // null
function func1(){
func();
}
func1(); // 返回func1
6js中的保留字是啥
程序中預定義的關鍵字(函數名、類名、屬性名、方法名等標識符)都是js中的保留字。 這些保留字,不允許用戶再次聲明為變量、方法、函數
保留字在編譯器中會變色。
7工廠方式創建js對象是啥方式 (JS中創建對象的多種方式)
① 字面量模式: var obj = {}
混合模式就是我們所說的將屬性添加到成員屬性(構造函數模式),將方法添加到原型方法(原型模式)
8js延遲加載的方式有哪些?
http://blog.csdn.net/dragoo1/article/details/48155501
+將JS代碼放在文檔最后也是延遲加載的方式之一。
9documen.write和 innerHTML 的區別?
documen.write 是直接在整個文檔中,寫入代碼。會覆蓋掉其他已有代碼。
innerHTML 是選中一個節點后,修改節點里面的代碼,只影響當前節點。
10javascript 中的垃圾回收機制?閉包中的內存釋放?
Js中的垃圾回收機制,函數中的變量,會在函數執行完成后,被回收處理。
但是,如果函數中使用了閉包,那么函數中的變量將始終被內部的函數持有,而不會在函數執行完成后釋放。
http://www.cnblogs.com/zhwl/p/4664604.html
閉包的兩個重要作用:
① 可以讓函數外部,能夠訪問函數內部的變量。
② 讓函數內部的變量在函數執行完成后,不會被釋放,而始終保持在內存中
11哪些操作會造成內存泄漏
大量使用全局變量
大量使用閉包
清除DOM節點時,只清除節點,而沒有刪除事件
http://www.cnblogs.com/libin-1/p/6013490.html
12js中的精度問題
JS中在浮點數運算或者大整數運算的時候,可能導致不准確的結果出現。 例如0.7+0.1=0.7999999999999 解決辦法可以將數字*10相加,然后再除以10
http://www.cnblogs.com/snandy/p/4943138.html
13defer和async
1.默認引用 script:<script type="text/javascript" src="x.min.js"></script>
當瀏覽器遇到 script 標簽時,文檔的解析將停止,並立即下載並執行腳本,腳本執行完畢后將繼續解析文檔。
2.async模式
<script type="text/javascript" src="x.min.js" async="async"></script>
當瀏覽器遇到 script 標簽時,文檔的解析不會停止,其他線程將下載腳本,腳本下載完成后開始執行腳本,腳本執行的過程中文檔將停止解析,直到腳本執行完畢。
3.defer(延遲)模式
<script type="text/javascript" src="x.min.js" defer="defer"></script>
當瀏覽器遇到 script 標簽時,文檔的解析不會停止,其他線程將下載腳本,待到文檔解析完成,腳本才會執行。
http://www.cnblogs.com/xuechenlei/p/5947555.html
14解釋下這個css選擇器發生什么? [role=nav]>ul a:not([href^=mailto]){}
[role=nav] 選中頁面中 role屬性等於nav的元素. 也就是導航欄
[role=nav]>ul 導航欄中的子節點 ul
[role=nav]>ul a UL里面的a標簽
a:not([href^=mailto]) 選中a標簽,除了href屬性使用mailto開頭的。
選中導航欄中的ul里面的不是mailto的a標簽。