JS面試題匯總


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是啥?

  APIApplication 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的作用

  寫法不同

calleeArguments的一個屬性,在函數中使用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里面的不是mailtoa標簽。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM