摘要:一般情況下是全局對象。是可以被偵測到的行為。顧名思義,這種模式使得在更嚴格的條件下運行。安全問題暴露了與服務(wù)器交互的細節(jié)。破壞了程序的異常機制。避免使用表達式又稱動態(tài)屬性。用于表示請求成功。
注明:上一篇獻給前端求職路上的你們(上),主要側(cè)重說的是前端面試中的html和css這兩塊常見問題,這是基礎(chǔ),其實在真正面試中,面試官往往采用的是由難到易的套路,那js和jQuery就是重中之重了,以及針對項目和所用技術(shù)方面的一些問題也就是你的必備儲糧啦!
什么是閉包(closure),為什么要用它?javascript
閉包簡單的說就是一個函數(shù)能訪問外部函數(shù)的變量,這就是閉包,不理解就看代碼,例如:
function aa(x){ var num=1; function bb(y){ console.log(x+y+(++num)); } }
aa函數(shù)中的bb函數(shù)就是閉包了,bb函數(shù)可以使用aa函數(shù)的局部變量,參數(shù),最典型的閉包應(yīng)該是下面這樣,將定義在函數(shù)中的函數(shù)作為返回值
function aa(x){ var num=1; function bb(y){ console.log(x+y+(++num)); } return bb; }
閉包的另一種作用是隔離作用域,請看下面這段代碼
for(var i=0;i<2;i++){ setTimeout(function(){ console.log(i); },0); }
上面這段代碼的執(zhí)行結(jié)果是2,2而不是0,1,因為等for循環(huán)出來后,執(zhí)行setTimeout中的函數(shù)時,i的值已經(jīng)變成了2.
談?wù)凾his對象的理解this是js的一個關(guān)鍵字,隨著函數(shù)使用場合不同,this的值會發(fā)生變化。
但是有一個總原則,那就是this指的是調(diào)用函數(shù)的那個對象。
this一般情況下:是全局對象Global。 作為方法調(diào)用,那么this就是指這個對象
事件是?IE與火狐的事件機制有什么區(qū)別? 如何阻止冒泡?我們在網(wǎng)頁中的某個操作(有的操作對應(yīng)多個事件)。例如:當我們點擊一個按鈕就會產(chǎn)生一個事件。是可以被 JavaScript 偵測到的行為。
事件處理機制:IE是事件冒泡、火狐是 事件捕獲;
ev.stopPropagation();
JavaScript的作用域和作用域鏈?JavaScript的作用域指的是變量的作用范圍,內(nèi)部作用域由函數(shù)的形參,實參,局部變量,函數(shù)構(gòu)成,內(nèi)部作用域和外部的作用域一層層的鏈接起來形成作用域鏈,當在在函數(shù)內(nèi)部要訪問一個變量的時候,首先查找自己的內(nèi)部作用域有沒有這個變量,如果沒有就到這個對象的原型對象中去查找,還是沒有的話,就到該作用域所在的作用域中找,直到到window所在的作用域,每個函數(shù)在聲明的時候就默認有一個外部作用域的存在了,代碼如下:
var t=4; function aa(){ var num1=12; funciton bb(){ var num2=34; console.log(t+" "+num1+" "+num2); } }
bb找t變量的過程就是,先到自己的內(nèi)部作用域中找,發(fā)現(xiàn)沒有找到,然后到bb所在的最近的外部變量中找,也就是aa的內(nèi)部作用域,還是沒有找到,再到window的作用域中找,結(jié)果找到了
“use strict”;是什么意思 ? 使用它的好處和壞處分別是什么?ECMAscript 5添加了第二種運行模式:"嚴格模式"(strict mode)。顧名思義,這種模式使得Javascript在更嚴格的條件下運行。
設(shè)立"嚴格模式"的目的,主要有以下幾個:
消除Javascript語法的一些不合理、不嚴謹之處,減少一些怪異行為;
消除代碼運行的一些不安全之處,保證代碼運行的安全;
提高編譯器效率,增加運行速度;
為未來新版本的Javascript做好鋪墊。
注:經(jīng)過測試 IE6,7,8,9 均不支持嚴格模式。缺點:
現(xiàn)在網(wǎng)站的 JS 都會進行壓縮,一些文件用了嚴格模式,而另一些沒有。這時這些本來是嚴格模式的文件,被 merge 后,這個就合并到了文件的中間,不僅沒有指示嚴格模式,反而在壓縮后浪費了字節(jié)。
new操作符具體干了什么呢?1、創(chuàng)建一個空對象,并且 this 變量引用該對象,同時還繼承了該函數(shù)的原型。
2、屬性和方法被加入到 this 引用的對象中。
3、新創(chuàng)建的對象由 this 所引用,并且最后隱式的返回 this 。
var obj = {}; obj.__proto__ = Base.prototype; Base.call(obj);Javascript中,有一個函數(shù),執(zhí)行時對象查找時,永遠不會去查找原型,這個函數(shù)是?
hasOwnProperty()
你對JSON 的了解?JSON(JavaScript Object Notation) 是一種輕量級的數(shù)據(jù)交換格式。
它是基于JavaScript的一個子集。數(shù)據(jù)格式簡單, 易于讀寫, 占用帶寬小 {"age":"12", "name":"back"}
defer和async、動態(tài)創(chuàng)建DOM方式(用得最多)、按需異步載入js
ajax 是什么?優(yōu)缺點有哪些? 優(yōu)點:通過異步模式,提升了用戶體驗
優(yōu)化了瀏覽器和服務(wù)器之間的傳輸,減少不必要的數(shù)據(jù)往返,減少了帶寬占用
Ajax在客戶端運行,承擔了一部分本來由服務(wù)器承擔的工作,減少了大用戶量下的服務(wù)器負載。
Ajax的最大的特點:
Ajax可以實現(xiàn)動態(tài)不刷新(局部刷新)
1、ajax不支持瀏覽器back按鈕。
2、安全問題 AJAX暴露了與服務(wù)器交互的細節(jié)。
3、對搜索引擎的支持比較弱。
4、破壞了程序的異常機制。
5、不容易調(diào)試。
jsonp(利用script標簽的跨域能力)跨域、websocket(html5的新特性,是一種新協(xié)議)跨域、設(shè)置代理服務(wù)器(由服務(wù)器替我們向不同源的服務(wù)器請求數(shù)據(jù))、CORS(跨源資源共享,cross origin resource sharing)、iframe跨域、postMessage(包含iframe的頁面向iframe傳遞消息)
模塊化怎么做?立即執(zhí)行函數(shù),不暴露私有成員var module1 = (function(){ var _count = 0; var m1 = function(){ //... }; var m2 = function(){ //... }; return { m1 : m1, m2 : m2 }; })();異步加載的方式有哪些?
(1) defer,只支持IE
(2) async: false,(默認是true);
(3) 創(chuàng)建script,插入到DOM中,加載完畢后callBack
document.write只能重繪整個頁面
innerHTML可以重繪頁面的一部分
.call() 和 .apply() 的區(qū)別?例子中用 add 來替換 sub,add.call(sub,3,1) == add(3,1) ,所以運行結(jié)果為:alert(4);
注意:js 中的函數(shù)其實是對象,函數(shù)名是對 Function 對象的引用。
function add(a,b) { alert(a+b); } function sub(a,b) { alert(a-b); } add.call(sub,3,1);Jquery與jQuery UI 有啥區(qū)別?
*jQuery是一個js庫,主要提供的功能是選擇器,屬性修改和事件綁定等等。
*jQuery UI則是在jQuery的基礎(chǔ)上,利用jQuery的擴展性,設(shè)計的插件。
提供了一些常用的界面元素,諸如對話框、拖動行為、改變大小行為等等
jQuery中沒有提供這個功能,所以你需要先編寫兩個jQuery的擴展:
$.fn.stringifyArray = function(array) { return JSON.stringify(array) } $.fn.parseArray = function(array) { return JSON.parse(array) } 然后調(diào)用: $("").stringifyArray(array)針對 jQuery 的優(yōu)化方法?
基于Class的選擇性的性能相對于Id選擇器開銷很大,因為需遍歷所有DOM元素。
頻繁操作的DOM,先緩存起來再操作。用Jquery的鏈式調(diào)用更好。
比如:var str=$("a").attr("href"); *for (var i = size; i < arr.length; i++) {}
for 循環(huán)每一次循環(huán)都查找了數(shù)組 (arr) 的.length 屬性,在開始循環(huán)的時候設(shè)置一個變量來存儲這個數(shù)字,可以讓循環(huán)跑得更快:
for (var i = size, length = arr.length; i < length; i++) {}
在函數(shù)用var聲明的變量會在函數(shù)中函數(shù)體執(zhí)行之前預(yù)先加載(變量回預(yù)先聲明但是不會賦值)
請看代碼,就會秒懂
var num=1; function aa(){ console.log(num); //undeifned var num=2; console.log(num); //2 } aa();
為什么在aa函數(shù)中會出現(xiàn)上述結(jié)果呢,這就是JavaScript的變量提升了,雖然變量num的定義在后面,不過瀏覽器在解析的時候,會把變量的定義放到最前面,上面的aa函數(shù)相當于
function aa(){ var num; console.log(num); //undefined num=2; console.log(num); //2 }
(簡單的內(nèi)存圖)
那些操作會造成內(nèi)存泄漏?內(nèi)存泄漏指任何對象在您不再擁有或需要它之后仍然存在。
垃圾回收器定期掃描對象,并計算引用了每個對象的其他對象的數(shù)量。如果一個對象的引用數(shù)量為 0(沒有其他對象引用過該對象),或?qū)υ搶ο蟮奈┮灰檬茄h(huán)的,那么該對象的內(nèi)存即可回收。
setTimeout 的第一個參數(shù)使用字符串而非函數(shù)的話,會引發(fā)內(nèi)存泄漏。
閉包、控制臺日志、循環(huán)(在兩個對象彼此引用且彼此保留時,就會產(chǎn)生一個循環(huán))
通過判斷Global對象是否為window,如果不為window,當前腳本沒有運行在瀏覽器中
當然,在面試中,除了要知道這些基礎(chǔ)的知識外,很多時候需要的是你的工作經(jīng)驗,你有沒有?接下來就是在工作中,項目中,遇到的問題,解決方案,以及思考的一些套路啦
其他問題(舉一些我碰見過的及匯總下來的問題,謹供大家參考)
你遇到過比較難的技術(shù)問題是?你是如何解決的?
常使用的庫有哪些?常用的前端開發(fā)工具?開發(fā)過什么應(yīng)用或組件?
頁面重構(gòu)怎么操作?
列舉IE 與其他瀏覽器不一樣的特性?
99%的網(wǎng)站都需要被重構(gòu)是那本書上寫的?
什么叫優(yōu)雅降級和漸進增強?
WEB應(yīng)用從服務(wù)器主動推送Data到客戶端有那些方式?
你在現(xiàn)在的團隊處于什么樣的角色,起到了什么明顯的作用?
除了前端以外還了解什么其它技術(shù)么?你最最厲害的技能是什么?
如何設(shè)計突發(fā)大規(guī)模并發(fā)架構(gòu)?
你認為怎樣才是全端工程師(Full Stack developer)?
介紹一個你最得意的作品吧?
你的優(yōu)點是什么?缺點是什么?
如何管理前端團隊?
最近在學什么?能談?wù)勀阄磥?,5年給自己的規(guī)劃嗎?
對Node的優(yōu)點和缺點提出了自己的看法? 優(yōu)點因為Node是基于事件驅(qū)動和無阻塞的,所以非常適合處理并發(fā)請求, 因此構(gòu)建在Node上的代理服務(wù)器相比其他技術(shù)實現(xiàn)(如Ruby)的服務(wù)器表現(xiàn)要好得多。 此外,與Node代理服務(wù)器交互的客戶端代碼是由javascript語言編寫的, 因此客戶端和服務(wù)器端都用同一種語言編寫,這是非常美妙的事情。
缺點:Node是一個相對新的開源項目,所以不太穩(wěn)定,它總是一直在變, 而且缺少足夠多的第三方庫支持。看起來,就像是Ruby/Rails當年的樣子。
你有哪些性能優(yōu)化的方法?(看雅虎14條性能優(yōu)化原則)(1) 減少http請求次數(shù):CSS Sprites, JS、CSS源碼壓縮、圖片大小控制合適;網(wǎng)頁Gzip,CDN托管,data緩存 ,圖片服務(wù)器。
(2) 前端模板 JS+數(shù)據(jù),減少由于HTML標簽導(dǎo)致的帶寬浪費,前端用變量保存AJAX請求結(jié)果,每次操作本地變量,不用請求,減少請求次數(shù)
(3) 用innerHTML代替DOM操作,減少DOM操作次數(shù),優(yōu)化javascript性能。
(4) 當需要設(shè)置的樣式很多時設(shè)置className而不是直接操作style。
(5) 少用全局變量、緩存DOM節(jié)點查找的結(jié)果。減少IO讀取操作。
(6) 避免使用CSS Expression(css表達式)又稱Dynamic properties(動態(tài)屬性)。
(7) 圖片預(yù)加載,將樣式表放在頂部,將腳本放在底部 加上時間戳。
(8) 避免在頁面的主體布局中使用table,table要等其中的內(nèi)容完全下載之后才會顯示出來,顯示比div+css布局慢。
100-199 用于指定客戶端應(yīng)相應(yīng)的某些動作。 200-299 用于表示請求成功。 300-399 用于已經(jīng)移動的文件并且常被包含在定位頭信息中指定新的地址信息。 400-499 用于指出客戶端的錯誤。 400 1、語義有誤,當前請求無法被服務(wù)器理解。 401 當前請求需要用戶驗證 403 服務(wù)器已經(jīng)理解請求,但是拒絕執(zhí)行它。 500-599 用于支持服務(wù)器錯誤。 503 – 服務(wù)不可用一個頁面從輸入 URL 到頁面加載顯示完成,這個過程中都發(fā)生了什么?(流程說的越詳細越好)
查找瀏覽器緩存
DNS解析、查找該域名對應(yīng)的IP地址、重定向(301)、發(fā)出第二個GET請求
進行HTTP協(xié)議會話
客戶端發(fā)送報頭(請求報頭)
服務(wù)器回饋報頭(響應(yīng)報頭)
html文檔開始下載
文檔樹建立,根據(jù)標記請求所需指定MIME類型的文件
文件顯示
{瀏覽器這邊做的工作大致分為以下幾步: 加載:根據(jù)請求的URL進行域名解析,向服務(wù)器發(fā)起請求,接收文件(HTML、JS、CSS、圖象等)。 解析:對加載到的資源(HTML、JS、CSS等)進行語法解析,建議相應(yīng)的內(nèi)部數(shù)據(jù)結(jié)構(gòu)(比如HTML的DOM樹,JS的(對象)屬性表,CSS的樣式規(guī)則等等)}你常用的開發(fā)工具是什么,為什么?
可以從你接觸前端到逐步深入學習使用的過程中,你用過什么編輯器以及轉(zhuǎn)化的過程和原因方面回答
對前端界面工程師這個職位是怎么樣理解的?它的前景會怎么樣?
前端是最貼近用戶的程序員,比后端、數(shù)據(jù)庫、產(chǎn)品經(jīng)理、運營、安全都近。
實現(xiàn)界面交互
提升用戶體驗
有了Node.js,前端可以實現(xiàn)服務(wù)端的一些事情
前端是最貼近用戶的程序員,前端的能力就是能讓產(chǎn)品從 90分進化到 100 分,甚至更好,
參與項目,快速高質(zhì)量完成實現(xiàn)效果圖,精確到1px;
與團隊成員,UI設(shè)計,產(chǎn)品經(jīng)理的溝通;
做好的頁面結(jié)構(gòu),頁面重構(gòu)和用戶體驗;
處理hack,兼容、寫出優(yōu)美的代碼格式;
針對服務(wù)器的優(yōu)化、擁抱最新前端技術(shù)。
平時如何管理你的項目?先期團隊必須確定好全局樣式(globe.css),編碼模式(utf-8) 等;
編寫習慣必須一致(例如都是采用繼承式的寫法,單樣式都寫成一行);
標注樣式編寫人,各模塊都及時標注(標注關(guān)鍵樣式調(diào)用的地方);
頁面進行標注(例如 頁面 模塊 開始和結(jié)束);
CSS跟HTML 分文件夾并行存放,命名都得統(tǒng)一(例如style.css);
JS 分文件夾存放 命名以該JS功能為準的英文翻譯。
圖片采用整合的 images.png png8 格式文件使用 盡量整合在一起使用方便將來的管理
說說最近最流行的一些東西吧?常去哪些網(wǎng)站?Node.js、Mongodb、npm、MVVM、MEAN、three.js 、angular、react、vue
github?、?知乎?、?MDN、?ES6、?Bootstrap?、?git
清晰的視覺縱線、信息的分組、極致的減法、
利用選擇代替輸入、標簽及文字的排布方式、
依靠明文確認密碼、合理的鍵盤利用、
問公司問題:在面試中,其實是一個互動的環(huán)節(jié),不僅要回答問題,也要抓住機會,獲得主動權(quán),想問公司的一些問題?
目前關(guān)注哪些最新的Web前端技術(shù)(未來的發(fā)展方向)?
前端團隊如何工作的(實現(xiàn)一個產(chǎn)品的流程)?
公司的薪資結(jié)構(gòu)是什么樣子的?(摸清自己具體在什么層次)
公司的晉升機制具體是怎么樣的?(看出你的上進心的穩(wěn)定性)
最后贈言
企業(yè)面試主要是看你能不能干的了。企業(yè)很難招到一個適合的人,不會輕易把你淘汰掉。
如果對方挑你毛病,證明對方有招聘你的意圖,否則的話,對方不會浪費時間挑你毛病,挑你毛病的主要原因是,想壓榨你工資,所以你要自信一點,無論對方怎么挑你毛病都不要害怕。企業(yè)中沒有專門的面試官。
不是說我面試了這一家,他就一定要錄取我,還有很多公司等著你去挑,目光放長遠一點,一定要拿到自己滿意的薪資才做。
面試就是一個解開雙方謊言的過程,你能瞞過對方,證明你贏了。
換個心態(tài)去面試,不是企業(yè)在挑你,而是你在挑企業(yè)。昂起你自信的頭顱,勇敢的去迎接挑戰(zhàn)吧!你的未來屬于你!
轉(zhuǎn)載自:http://www.jianshu.com/p/87fa...
~END~
好了,下面是廣告時間。前端學習群,入群即送學習資料。現(xiàn)在還不滿,從速哦!入群加笑笑微信:iamaixiaoxiao。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/116600.html
摘要:一般情況下是全局對象。是可以被偵測到的行為。顧名思義,這種模式使得在更嚴格的條件下運行。安全問題暴露了與服務(wù)器交互的細節(jié)。破壞了程序的異常機制。避免使用表達式又稱動態(tài)屬性。用于表示請求成功。 注明:上一篇獻給前端求職路上的你們(上),主要側(cè)重說的是前端面試中的html和css這兩塊常見問題,這是基礎(chǔ),其實在真正面試中,面試官往往采用的是由難到易的套路,那js和jQuery就是重中之重了...
摘要:事件如何使用事件,以及和標準事件模型之間存在的差別以及常用的事件委托。模擬老式瀏覽器的行為以防止站點無法工作。首先,巧妙的使用這一標記,將游覽器從所有情況中分離出來。搜索引擎的爬蟲依賴于標記來確定上下文和各個關(guān)鍵字的權(quán)重,利于。 showImg(https://segmentfault.com/img/remote/1460000008630900); (在放大鏡中尋找你) 前言 我是...
摘要:事件如何使用事件,以及和標準事件模型之間存在的差別以及常用的事件委托。模擬老式瀏覽器的行為以防止站點無法工作。首先,巧妙的使用這一標記,將游覽器從所有情況中分離出來。搜索引擎的爬蟲依賴于標記來確定上下文和各個關(guān)鍵字的權(quán)重,利于。 showImg(https://segmentfault.com/img/remote/1460000008630900); (在放大鏡中尋找你) 前言 我是...
摘要:事件如何使用事件,以及和標準事件模型之間存在的差別以及常用的事件委托。模擬老式瀏覽器的行為以防止站點無法工作。首先,巧妙的使用這一標記,將游覽器從所有情況中分離出來。搜索引擎的爬蟲依賴于標記來確定上下文和各個關(guān)鍵字的權(quán)重,利于。 showImg(https://segmentfault.com/img/remote/1460000008630900); (在放大鏡中尋找你) 前言 我是...
閱讀 3024·2021-09-22 15:52
閱讀 2903·2019-08-30 15:55
閱讀 2700·2019-08-30 15:53
閱讀 2454·2019-08-30 13:21
閱讀 1620·2019-08-30 13:10
閱讀 2481·2019-08-26 12:09
閱讀 2563·2019-08-26 10:33
閱讀 1802·2019-08-23 18:06