說說你對閉包的理解
解決方法簡單的出奇,只要在之間加入一個或者元素就可以了。
null和undefined的區別?
null是一個表示"無"的對象,轉為數值時為0;undefined是一個表示"無"的原始值,轉為數值時為NaN。
當聲明的變量還未被初始化時,變量的默認值為undefined。 null用來表示尚未存在的對象,常用來表示函數企圖返回一個不存在的對象。
undefined表示"缺少值",就是此處應該有一個值,但是還沒有定義。典型用法是:
(1)變量被聲明了,但沒有賦值時,就等于undefined。
(2) 調用函數時,應該提供的參數沒有提供,該參數等于undefined。
(3)對象沒有賦值的屬性,該屬性的值為undefined。
(4)函數沒有返回值時,默認返回undefined。
null表示"沒有對象",即該處不應該有值。典型用法是:
(1) 作為函數的參數,表示該函數的參數不是對象。
(2) 作為對象原型鏈的終點。
new操作符具體干了什么呢?
1、創建一個空對象,并且 this 變量引用該對象,同時還繼承了該函數的原型。
2、屬性和方法被加入到 this 引用的對象中。
3、新創建的對象由 this 所引用,并且最后隱式的返回 this 。
var obj ?= {};
obj.__proto__ = Base.prototype;
Base.call(obj);
js延遲加載的方式有哪些?
defer和async、動態創建DOM方式(創建script,插入到DOM中,加載完畢后callBack)、按需異步載入js
如何解決跨域問題?
jsonp、 document.domain+iframe、window.name、window.postMessage、服務器上設置代理頁面
jsonp的原理是動態插入script標簽
具體參見:詳解js跨域問題
documen.write和 innerHTML的區別
document.write只能重繪整個頁面
innerHTML可以重繪頁面的一部分
.call() 和 .apply() 的區別和作用?
作用:動態改變某個類的某個方法的運行環境。 區別參見:JavaScript學習總結(四)function函數部分
哪些操作會造成內存泄漏?
內存泄漏指任何對象在您不再擁有或需要它之后仍然存在。
垃圾回收器定期掃描對象,并計算引用了每個對象的其他對象的數量。如果一個對象的引用數量為 0(沒有其他對象引用過該對象),或對該對象的惟一引用是循環的,那么該對象的內存即可回收。
setTimeout 的第一個參數使用字符串而非函數的話,會引發內存泄漏。
閉包、控制臺日志、循環(在兩個對象彼此引用且彼此保留時,就會產生一個循環)
詳見:詳解js變量、作用域及內存
JavaScript中的作用域與變量聲明提升?
詳見:詳解JavaScript函數模式
如何判斷當前腳本運行在瀏覽器還是node環境中?
通過判斷Global對象是否為window,如果不為window,當前腳本沒有運行在瀏覽器中
其他問題?
你遇到過比較難的技術問題是?你是如何解決的?
列舉IE 與其他瀏覽器不一樣的特性?
什么叫優雅降級和漸進增強?
優雅降級:Web站點在所有新式瀏覽器中都能正常工作,如果用戶使用的是老式瀏覽器,則代碼會檢查以確認它們是否能正常工作。由于IE獨特的盒模型布局問題,針對不同版本的IE的hack實踐過優雅降級了,為那些無法支持功能的瀏覽器增加候選方案,使之在舊式瀏覽器上以某種形式降級體驗卻不至于完全失效.
漸進增強:從被所有瀏覽器支持的基本功能開始,逐步地添加那些只有新式瀏覽器才支持的功能,向頁面增加無害于基礎瀏覽器的額外樣式和功能的。當瀏覽器支持時,它們會自動地呈現出來并發揮作用。
詳見:css學習歸納總結(一)
WEB應用從服務器主動推送Data到客戶端有那些方式?
Javascript數據推送
Commet:基于HTTP長連接的服務器推送技術
基于WebSocket的推送方案
SSE(Server-Send Event):服務器推送數據新方式
對前端界面工程師這個職位是怎么樣理解的?它的前景會怎么樣?
前端是最貼近用戶的程序員,比后端、數據庫、產品經理、運營、安全都近。
1、實現界面交互
2、提升用戶體驗
3、有了Node.js,前端可以實現服務端的一些事情
前端是最貼近用戶的程序員,前端的能力就是能讓產品從 90分進化到 100 分,甚至更好,
參與項目,快速高質量完成實現效果圖,精確到1px;
與團隊成員,UI設計,產品經理的溝通;
做好的頁面結構,頁面重構和用戶體驗;
處理hack,兼容、寫出優美的代碼格式;
針對服務器的優化、擁抱最新前端技術。
你有哪些性能優化的方法?
(詳情請看雅虎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) 圖片預加載,將樣式表放在頂部,將腳本放在底部 ?加上時間戳。
詳情:http://segmentfault.com/blog/trigkit4/1190000000691919
一個頁面從輸入 URL 到頁面加載顯示完成,這個過程中都發生了什么?
分為4個步驟:
(1),當發送一個URL請求時,不管這個URL是Web頁面的URL還是Web頁面上每個資源的URL,瀏覽器都會開啟一個線程來處理這個請求,同時在遠程DNS服務器上啟動一個DNS查詢。這能使瀏覽器獲得請求對應的IP地址。
(2), 瀏覽器與遠程Web服務器通過TCP三次握手協商來建立一個TCP/IP連接。該握手包括一個同步報文,一個同步-應答報文和一個應答報文,這三個報文在 瀏覽器和服務器之間傳遞。該握手首先由客戶端嘗試建立起通信,而后服務器應答并接受客戶端的請求,最后由客戶端發出該請求已經被接受的報文。
(3),一旦TCP/IP連接建立,瀏覽器會通過該連接向遠程服務器發送HTTP的GET請求。遠程服務器找到資源并使用HTTP響應返回該資源,值為200的HTTP響應狀態表示一個正確的響應。
(4),此時,Web服務器提供資源服務,客戶端開始下載資源。
請求返回后,便進入了我們關注的前端模塊
簡單來說,瀏覽器會解析HTML生成DOM Tree,其次會根據CSS生成CSS Rule Tree,而javascript又可以根據DOM API操作DOM
詳情:從輸入 URL 到瀏覽器接收的過程中發生了什么事情?
平時如何管理你的項目?
先期團隊必須確定好全局樣式(globe.css),編碼模式(utf-8) 等;
編寫習慣必須一致(例如都是采用繼承式的寫法,單樣式都寫成一行);
標注樣式編寫人,各模塊都及時標注(標注關鍵樣式調用的地方);
頁面進行標注(例如 頁面 模塊 開始和結束);
CSS跟HTML 分文件夾并行存放,命名都得統一(例如style.css);
JS 分文件夾存放 命名以該JS功能為準的英文翻譯。
圖片采用整合的 images.png png8 格式文件使用 盡量整合在一起使用方便將來的管理