js面向對象面試資料javascript
1 說說你對閉包的理解css
使用閉包主要是爲了設計私有的方法和變量。閉包的優勢是能夠避免全局變量的污染,缺點是閉包會常駐內存,會增大內存使用量,使用不當很容易形成內存泄露。前端
閉包有三個特性:java
1.函數嵌套函數面試
2.函數內部能夠引用外部的參數和變量瀏覽器
3.參數和變量不會被垃圾回收機制回收緩存
二、call() 和 .apply() 的區別和做用?性能優化
做用:動態改變某個類的某個方法的運行環境。前端框架
一、call,apply都屬於Function.prototype的一個方法,它是JavaScript引擎內在實現的,由於屬於Function.prototype,因此每一個Function對象實例(就是每一個方法)都有call,apply屬性。既然做爲方法的屬性,那它們的使用就固然是針對方法的了,這兩個方法是容易混淆的,由於它們的做用同樣,只是使用方式不一樣。服務器
二、語法:foo.call(this, arg1,arg2,arg3) == foo.apply(this, arguments) == this.foo(arg1, arg2, arg3);
三、相同點:兩個方法產生的做用是徹底同樣的。
四、不一樣點:方法傳遞的參數不一樣。
三、javascript裏面的繼承怎麼實現,如何避免原型鏈上面的對象共享
用構造函數和原型鏈的混合模式去實現繼承,避免對象共享能夠參考經典的extend()函數,不少前端框架都有封裝的,就是用一個空函數當作中間變量
四、JavaScript原型,原型鏈 ? 有什麼特色?
原型對象也是普通的對象,是對象一個自帶隱式的 __proto__ 屬性,原型也有可能有本身的原型,若是一個原型對象的原型不爲null的話,咱們就稱之爲原型鏈。*
原型鏈是由一些用來繼承和共享屬性的對象組成的(有限的)對象鏈。
五、你如何對網站的文件和資源進行優化
期待的解決方案包括:
文件合併
文件最小化/文件壓縮
使用 CDN 託管
緩存的使用(多個域名來提供緩存)
其餘
六、請說出三種減小頁面加載時間的方法。
1.優化圖片
2.圖像格式的選擇(GIF:提供的顏色較少,可用在一些對顏色要求不高的地方)
3.優化CSS(壓縮合並css,如margin-top,margin-left...)
4.網址後加斜槓(如www.campr.com/目錄,會判斷這個「目錄是什麼文件類型,或者是目錄。)
5.標明高度和寬度(若是瀏覽器沒有找到這兩個參數,它須要一邊下載圖片一邊計算大小,若是圖片不少,瀏覽器須要不斷地調整頁面。這不但影響速度,也影響瀏覽體驗。
當瀏覽器知道了高度和寬度參數後,即便圖片暫時沒法顯示,頁面上也會騰出圖片的空位,而後繼續加載後面的內容。從而加載時間快了,瀏覽體驗也更好了。)
6.減小http請求(合併文件,合併圖片)。
七、javascript繼承的6種方法
1,原型鏈繼承
2,借用構造函數繼承
3,組合繼承(原型+借用構造)
4,原型式繼承
5,寄生式繼承
6,寄生組合式繼承
javascript對象的幾種建立方式
1,工廠模式
2,構造函數模式
3,原型模式
4,混合構造函數和原型模式
5,動態原型模式
6,寄生構造函數模式
7,穩妥構造函數模式
八、你有哪些性能優化的方法?
(詳情請看雅虎14條性能優化原則)。
(1) 減小http請求次數:CSS Sprites, JS、CSS源碼壓縮、圖片大小控制合適;網頁Gzip,CDN託管,data緩存 ,圖片服務器。
(2) 前端模板 JS+數據,減小因爲HTML標籤致使的帶寬浪費,前端用變量保存AJAX請求結果,每次操做本地變量,不用請求,減小請求次數
(3) 用innerHTML代替DOM操做,減小DOM操做次數,優化javascript性能。
(4) 當須要設置的樣式不少時設置className而不是直接操做style。
(5) 少用全局變量、緩存DOM節點查找的結果。減小IO讀取操做。
(6) 避免使用CSS Expression(css表達式)又稱Dynamic properties(動態屬性)。
(7) 圖片預加載,將樣式表放在頂部,將腳本放在底部 ?加上時間戳。
9平時如何管理你的項目?
1先期團隊必須肯定好全局樣式(globe.css),編碼模式(utf-8) 等;
2 編寫習慣必須一致(例如都是採用繼承式的寫法,單樣式都寫成一行);
3 標註樣式編寫人,各模塊都及時標註(標註關鍵樣式調用的地方);
4 頁面進行標註(例如 頁面 模塊 開始和結束);
5 CSS跟HTML 分文件夾並行存放,命名都得統一(例如style.css);
6 JS 分文件夾存放 命名以該JS功能爲準的英文翻譯。
十、什麼是閉包,閉包什麼狀況會致使內存溢出?
直接來說,閉包就是可以讀取其餘函數內部變量的函數,在Javascript語言中,只有函數內部的子函數才能讀取局部變量,所以能夠把閉包簡單理解成"定義在一個函數內部的函數",因此,在本質上,閉包就是將函數內部和函數外部鏈接起來的一座橋樑。閉包最大用處有兩個,一個是能夠讀取函數內部的變量,另外一個就是讓這些變量的值始終保持在內存中。
閉包引發內存泄露的緣由有兩種:
1. 循環引用致使了內存泄漏
2. 由外部函數調用引發的內存泄漏
避免內存泄漏
1. 打破循環引用
2. 添加另外一個閉包
3. 避免閉包自身
解決閉包:用完直接==null;