前端面試總結

HTML

Doctype做用? 嚴格模式與混雜模式如何區分?它們有何意義?javascript

<!DOCTYPE><html>(1)、聲明位於文檔中的最前面,處於標籤以前。告知瀏覽器的解析器,
     用什麼文檔類型 規範來解析這個文檔。
 
(2)、嚴格模式的排版和 JS 運做模式是  以該瀏覽器支持的最高標準運行。
 
(3)、在混雜模式中,頁面以寬鬆的向後兼容的方式顯示。模擬老式瀏覽器的行爲以防止站點沒法工做。
 
(4)、DOCTYPE不存在或格式不正確會致使文檔以混雜模式呈現。

行內元素有哪些?塊級元素有哪些? 空(void)元素有那些?css

(1)CSS規範規定,每一個元素都有display屬性,肯定該元素的類型,每一個元素都有默認的display值,
 好比div默認display屬性值爲「block」,成爲「塊級」元素;
  span默認display屬性值爲「inline」,是「行內」元素。 
 
(2)行內元素有:a b span img input select strong(強調的語氣)
 塊級元素有:div ul ol li dl dt dd h1 h2 h3 h4…p 
 
<br><hr><img><input><link><meta>(3)知名的空元素:
<area><base><col><command><embed><keygen><param><source><track><wbr>不爲人知的是:

link 和@import 的區別是?html

1link@import()屬於XHTML標籤,而是CSS提供的;
 
2link@import()頁面被加載的時,會同時被加載,而引用的CSS會等到頁面被加載完再加載;
 
3link()import只在IE5以上才能識別,而是XHTML標籤,無兼容問題;
 
4link@import()方式的樣式的權重 高於的權重.

瀏覽器的內核分別是什麼?前端

 * IE瀏覽器的內核Trident、火狐瀏覽器的內核Gecko、Chrome的瀏覽器內核:WebKit Opera內核原爲Presto,現爲Blink;

常見兼容性問題?html5

png24iE6PNG8*位的圖片在瀏覽器上出現背景,解決方案是作成.
 
marginpadding{margin:0;padding:0;}*瀏覽器默認的和不一樣。解決方案是加一個全局的*來統一。
 
IE6bugfloatmarginie6margin*雙邊距:塊屬性標籤後,又有橫行的狀況下,在顯示比設置的大。
 
ie#box{ float:left; width:10px; margin:0 0 0 100px;} 浮動產生的雙倍距離
 
IEpxfloatdisplay:inlineie6 這種狀況之下會產生20的距離,解決方案是在的標籤樣式控制中加入 ——_;將其轉化爲行內屬性。(_這個符號只有會識別)
 
 漸進識別的方式,從整體中逐漸排除局部。
 
IE 首先,巧妙的使用「\9」這一標記,將遊覽器從全部狀況中分離出來。
IE8IE7IE6IE8 接着,再次使用「+」將和、分離開來,這樣已經獨立識別。
 
css 
.bb{     
       background-color:#f1ee18;/*全部識別*/
      .background-color:#00deff\9; /*IE六、七、8識別*/
      +background-color:#a200ff;/*IE六、7識別*/
      _background-color:#1e0bd1;/*IE6識別*/ 
      }
 
IE* 下,可使用獲取常規屬性的方法來獲取自定義屬性,
getAttribute  也可使用()獲取自定義屬性;
FirefoxgetAttribute  下,只能使用()獲取自定義屬性.
getAttribute  解決方法:統一經過()獲取自定義屬性.
 
IEevenxypageXpageY*下,對象有,屬性,可是沒有,屬性;
FirefoxeventpageXpageYxy 下,對象有,屬性,可是沒有,屬性.
 
IEHTTP*解決方法:(條件註釋)缺點是在瀏覽器下可能會增長額外的請求數。
 
Chromepxpx*中文界面下默認會將小於 12的文本強制按照 12顯示,
CSS-webkit-text-size-adjustnone 可經過加入屬性:;解決.
 
hoverhoveractiveCSSL-V-H-Aa:link{}a:visited{}a:hover{}a:active{}超連接訪問事後樣式就不出現了 被點擊訪問過的超連接樣式不在具備和了解決方法是改變屬性的排列順序:: 

html5有哪些新特性、移除了那些元素?如何處理HTML5新標籤的瀏覽器兼容問題?如何區分 HTML 和 HTML5?java

* HTML5如今已經不是 SGML 的子集,主要是關於圖像,位置,存儲,多任務等功能的增長。
*繪畫 canvas 
 用於媒介回放的 video 和 audio 元素
 本地離線存儲 localStorage 長期存儲數據,瀏覽器關閉後數據不丟失;
  sessionStorage的數據在瀏覽器關閉後自動刪除
 語意化更好的內容元素,好比 article、footer、header、nav、section
 表單控件,calendar、date、time、email、url、search 
 新的技術webworker, websockt, Geolocation
*移除的元素
純表現的元素:basefont,big,center,font, s,strike,tt,u;
對可用性產生負面影響的元素:frame,frameset,noframes;
支持HTML5新標籤:
* IE8/IE7/IE6支持經過document.createElement方法產生的標籤,
 能夠利用這一特性讓這些瀏覽器支持HTML5新標籤,
 瀏覽器支持新標籤後,還須要添加標籤默認的樣式:
*固然最好的方式是直接使用成熟的框架、使用最多的是html5shim框架
<!--[if lt IE 9]>   
   <script> src="http://html5shim.googlecode.com/svn/trunk/html5.js"</script> 
   <![endif]-->
如何區分: DOCTYPE聲明\新增的結構元素\功能元素

語義化的理解?node

用正確的標籤作正確的事情!
html語義化就是讓頁面的內容結構化,便於對瀏覽器、搜索引擎解析;
在沒有樣式CCS狀況下也以一種文檔格式顯示,而且是容易閱讀的。
搜索引擎的爬蟲依賴於標記來肯定上下文和各個關鍵字的權重,利於 SEO。
使閱讀源代碼的人對網站更容易將網站分塊,便於閱讀維護理解。

HTML5的離線儲存?jquery

localStorage   長期存儲數據,瀏覽器關閉後數據不丟失;
sessionStorage 數據在瀏覽器關閉後自動刪除。

(寫)描述一段語義的html代碼吧。git

<article><nav><header><footer>(HTML5中新增長的不少標籤(如:、、和等)
 就是基於語義化設計原則) 
< div id="header">   
< h1>< /h1>   標題
< h2>< /h2>   專一Web前端技術
< /div>   

iframe有那些缺點?程序員

*iframe會阻塞主頁面的Onload事件;
*iframe和主頁面共享鏈接池,而瀏覽器對相同域的鏈接有限制,因此會影響頁面的並行加載。
使用iframe以前須要考慮這兩個缺點。若是須要使用iframe,最好是經過javascript
動態給iframe添加src屬性值,這樣能夠能夠繞開以上兩個問題。

請描述一下 cookies,sessionStorage 和 localStorage 的區別?

localcookie在瀏覽器和服務器間來回傳遞。 sessionStorage和Storage不會
localsessionStorage和Storage的存儲空間更大;
localsessionStorage和Storage有更多豐富易用的接口;
localsessionStorage和Storage各自獨立的存儲空間;

如何實現瀏覽器內多個標籤頁之間的通訊?

調用localstorge、cookies等本地存儲方式

webSocket如何兼容低瀏覽器?

AdobeFlash Socket、 ActiveX HTMLFile (IE) 、 基於 multipart 編碼發送 XHR 、 基於長輪詢的 XHR

CSS

介紹一下CSS的盒子模型?

(1)有兩種, IE 盒子模型、標準 W3C 盒子模型;IE的content部分包含了 border 和 pading;
(2)盒模型: 內容(content)、填充(padding)、邊界(margin)、 邊框(border).

 

 

CSS 選擇符有哪些?哪些屬性能夠繼承?優先級算法如何計算? CSS3新增僞類有那些?

*       2.類選擇器(.myclassname)    3.標籤選擇器(div, h1, p)    4.相鄰選擇器(h1 + p)    5.子選擇器(ul < li)    6.後代選擇器(li a)    7.通配符選擇器( * )    8.屬性選擇器(a[rel = "external"])    9.僞類選擇器(a: hover, li: nth - child)1.id選擇器( # myid)
*   可繼承的樣式: font-size font-family color, UL LI DL DD DT;
*   不可繼承的樣式:border padding margin width height ;
*   優先級就近原則,同權重狀況下樣式定義最近者爲準;
*   載入樣式以最後載入的定位爲準;

優先級爲:

class > tag     !important >  id >
 
   important比 內聯優先級高

CSS3新增僞類舉例:

p:first-of-typepp選擇屬於其父元素的首個 <>元素的每一個 <>元素。
p:last-of-typepp 選擇屬於其父元素的最後 <>元素的每一個 <>元素。
p:only-of-typepp 選擇屬於其父元素惟一的 <>元素的每一個 <>元素。
p:only-childp   選擇屬於其父元素的惟一子元素的每一個 <>元素。
p:nth-child(2)p 選擇屬於其父元素的第二個子元素的每一個 <>元素。
:enabled:disabled 控制表單控件的禁用狀態。
:checked       單選框或複選框被選中。

如何居中div?如何居中一個浮動元素?

給div設置一個寬度,而後添加margin:0 auto屬性

div{
    width:200px;
    margin:0 auto;
 } 

居中一個浮動元素

 肯定容器的寬高 寬500 高 300 的層
 設置層的外邊距
.div{  
  Width:500px ; height:300px;//高度能夠不設
  Margin: -150px 0 0 -250px;
  position:relative;相對定位
  background-color:pink;//方便看效果
  left:50%;
  top:50%;}

列出display的值,說明他們的做用。position的值, relative和absolute定位原點是?

1.   
  block象塊類型元素同樣顯示。
  none缺省值。象行內元素類型同樣顯示。
inline -block象行內元素同樣顯示,但其內容象塊類型元素同樣顯示。
list -item象塊類型元素同樣顯示,並添加樣式列表標記。
2. 
  *absolute 
static        生成絕對定位的元素,相對於定位之外的第一個父元素進行定位。
  *fixed (老IE不支持)
       生成絕對定位的元素,相對於瀏覽器窗口進行定位。
  *relative 
       生成相對定位的元素,相對於其正常位置進行定位。
static  *  默認值。沒有定位,元素出如今正常的流中
  *(忽略 top, bottom, left, right z-index 聲明)。
  * inherit規定從父元素繼承 position 屬性的值。

CSS3有哪些新特性?

810  CSS3實現圓角(border-radius:px),陰影(box-shadow:px),
 對文字加特效(text-shadow、),線性漸變(gradient),旋轉(transform)
90.850.9003090//旋轉,縮放,定位,傾斜  transform:rotate(deg) scale(,) translate(px,-px) skew(-deg,deg);
 增長了更多的CSS選擇器  多背景 rgba

你怎麼來實現頁面設計圖,你認爲前端應該如何高質量完成工做? 一個滿屏 品 字佈局 如何設計?

*首先劃分紅頭部、body、腳部;。。。。。
  實現效果圖是最基本的工做,精確到2px;
 與設計師,產品經理的溝通和項目的參與
 作好的頁面結構,頁面重構和用戶體驗
 處理hack,兼容、寫出優美的代碼格式
 針對服務器的優化、擁抱 HTML5。

常使用的庫有哪些?經常使用的前端開發工具?開發過什麼應用或組件?

    *使用率較高的框架有jQuery、YUI、Prototype、Dojo、Ext.js、Mootools等。尤爲是jQuery,超過91%。
 輕量級框架有Modernizr、underscore.js、backbone.js、Raphael.js等。
(理解這些框架的功能、性能、設計原理)
    * Sublime Text、Eclipse、Notepad、Firebug、HttpWatch、Yslow。
 
    *城市選擇插件,汽車型號選擇插件、幻燈片插件。彈出層。(寫過開源程序,加載器,js引擎更好)

常常遇到的CSS的兼容性有哪些?緣由,解決方法是什麼?

爲何要初始化CSS樣式。

-CSS由於瀏覽器的兼容問題,不一樣瀏覽器對有些標籤的默認值是不一樣的,若是沒對初始化每每會出現瀏覽器之間的頁面顯示差別。
-SEO固然,初始化樣式會對有必定的影響,但魚和熊掌不可兼得,但力求影響最小的狀況下初始化。
 
{padding: 0; margin: 0;}*最簡單的初始化方法就是: *(不建議)
 
bodyh1h2h3h4h5h6hrpblockquotedldtddulollipreformfieldsetlegendbuttoninputtextareathtd{ margin:0; padding:0; }bodybuttoninputselecttextarea{ font:12px/1.5tahoma, arial, \5b8b\4f53; }h1h2h3h4h5h6{ font-size:100%; }addresscitedfnemvar{ font-style:normal; }codekbdpresamp{ font-family:couriernew, courier, monospace; }small{ font-size:12px; }ulol{ list-style:none; }a{ text-decoration:none; }a:hover{ text-decoration:underline; }sup{ vertical-align:text-top; }sub{ vertical-align:text-bottom; }legend{ color:#000; }fieldsetimg{ border:0; }buttoninputselecttextarea{ font-size:100%; }table{ border-collapse:collapse; border-spacing:0; }淘寶的樣式初始化:,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

absolute的containing block計算方式跟正常流有什麼不一樣?

position跟display、margin collapse、overflow、float這些特性相互疊加後會怎麼樣?

對BFC規範的理解?

(W3C CSS 2.1 規範中的一個概念,它決定了元素如何對其內容進行定位,以及與其餘元素的關 系和相互做用。)

css定義的權重

classid如下是權重的規則:標籤的權重爲1,的權重爲10,的權重爲100,如下例子是演示各類定義的權重值:
/*權重爲1*/div{}/*權重爲10*/.class1{}/*權重爲100*/#id1{}/*權重爲100+1=101*/#id1div{}/*權重爲10+1=11*/.class1div{}/*權重爲10+10+1=21*/.class1.class2div{}
 
若是權重相同,則最後定義的樣式會起做用,可是應該避免這種狀況出現

解釋下浮動和它的工做原理?清除浮動的技巧

浮動元素脫離文檔流,不佔據空間。浮動元素碰到包含它的邊框或者浮動元素的邊框停留。

技巧:

1.使用空標籤清除浮動。

   這種方法是在全部浮動標籤後面添加一個空標籤 定義css clear:both. 弊端就是增長了無心義標籤。

2.使用overflow。

   給包含浮動元素的父標籤添加css屬性 overflow:auto; zoom:1; zoom:1用於兼容IE6。

3.使用after僞對象清除浮動。

   該方法只適用於非IE瀏覽器。具體寫法可參照如下示例。使用中需注意如下幾點。1、該方法中必須爲須要清除浮動元素的僞對象中設置 height:0,不然該元素會比實際高出若干像素;

  4.在html頁面添加:<div class=’clear’></div>

用過媒體查詢,針對移動端的佈局嗎?

用過   @media screen and (min-width:480px){ }

使用 CSS 預處理器嗎?喜歡那個?

三款 CSS 預處理器框架,分別是 Sass、Less CSS、Stylus。    喜歡哪一個?Sass

什麼是CSS預處理器?

 CSS 預處理器是一種語言用來爲 CSS 增長一些編程的的特性,無需考慮瀏覽器的兼容性問題,例如你能夠在 CSS 中使用變量、簡單的程序邏輯、函數等等在編程語言中的一些基本技巧,可讓你的 CSS 更見簡潔,適應性更強,代碼更直觀等諸多好處。

titlealt區別?

alt屬性的功能是不能顯示圖像信息時候的替換文字(即在圖片顯示的位置上顯示文字,說明這個圖片的要顯示的內容)。Alt屬性值的長度必須少於100個英文字符。

       title屬性能夠用在除了base,basefont,head,html,meta,param,script和title以外的全部標籤。

       title屬性的功能是提示。額外的說明信息和非本質的信息請使用title屬性。title屬性值能夠比alt屬性值設置的更長。

       title屬性有一個很好的用途,即爲連接添加描述性文字,特別是當鏈接自己並非十分清楚的表達了連接的目的。這樣就使得訪問者知道那些連接將會帶他們到什麼地方,他們就不會加載一個可能徹底不感興趣的頁面。另一個潛在的應用就是爲圖像提供額外的說明信息,好比日期或者其餘非本質的信息。

解釋css sprites,如何使用。

CSS Sprite 又叫CSS精靈,是目前大型網站中常常運用的圖片處理方式。它的原理很簡單,將網站上零散的小圖片(或圖標)整合在一張大圖上,再用CSS中「background-image」屬性來定位圖片的X/Y軸位置,從而減輕服務器對圖片的請求數量,提升網頁加載速度。由於對於當前大多數網速而言,不高於200KB的單張圖片所需載入時間基本是差很少的,若是頁面上有20張小圖片或圖標,那麼服務器會載入20次。但使用CSS Sprite將圖片整合成一張大圖後,服務器只須要載入一次就夠了,很大程度上優化了圖片加載速度,這在門戶型網站尤其明顯。

CSS Sprites優勢

1.利用CSS Sprites能很好地減小了網頁的http請求,從而大大的提升了頁面的性能,這也是CSS Sprites最大的優勢,也是其被普遍傳播和應用的主要緣由;

2.CSS Sprites能減小圖片的字節,曾經比較過屢次3張圖片合併成1張圖片的字節老是小於這3張圖片的字節總和。解決了網頁設計師在圖片命名上的困擾,只需對一張集合的圖片上命名就能夠了,不須要對每個小元素進行命名,從而提升了網頁的製做效率。

3.更換風格方便,只須要在一張或少張圖片上修改圖片的顏色或樣式,整個網頁的風格就能夠改變。維護起來更加方便。

CSS Sprites缺點

1.在圖片合併的時候,你要把多張圖片有序的合理的合併成一張圖片,還要留好足夠的空間,防止板塊內不會出現沒必要要的背景;這些還好,最痛苦的是在寬屏,高分辨率的屏幕下的自適應頁面,你的圖片若是不夠寬,很容易出現背景斷裂;   

2.CSS Sprites在開發的時候比較麻煩,你要經過photoshop或其餘工具測量計算每個背景單元的精確位置,這是針線活,沒什麼難度,可是很繁瑣;幸虧騰訊的鬼哥用RIA開發了一個CSS Sprites 樣式生成工具,雖然還有一些使用上的不靈活,可是已經比photoshop測量來的方便多了,並且樣式直接生成,複製,拷貝就OK!   

3.CSS Sprites在維護的時候比較麻煩,若是頁面背景有少量改動,通常就要改這張合併的圖片,無需改的地方最好不要動,這樣避免改動更多的css,若是在原來的地方放不下,又只能(最好)往下加圖片,這樣圖片的字節就增長了,還要改動css。

22.在書寫高效css文件時會有哪些問題須要考慮


一:css 命名 、書寫規範;(好的代碼看上去就很整齊 頗有條理性這樣方便往後的維護和管理)


二:css優先級; 選擇器權重:內聯樣式:1000,id選擇器:1000, class選擇器:10,標籤選擇器:1  注意權重的問題。


三:少用濾鏡,少用hack,少用position:absolute;。


四:多用繼承屬性。


五:使用簡寫樣式:例如margin: 10px; 瀏覽器會解釋爲上下左右各有10px的外補丁。margin: 0 10px 瀏覽器解析爲 左右有10px的外補丁。


六:不要在ID選擇器和class選擇器前 使用標籤名 例如:div.box { color: #f00; }; 直接 能夠 用類名, .box { color:#f00;}  這樣瀏覽器找到這個class後 就不用再匹配是否存在div標籤.從而提升了渲染效率。固然同一級的 有不一樣的樣式能夠這樣寫,可是不建議這樣。


七:css的層級關係不要太深 用class直接代替多餘的層級元素。

 

JavaScript

  1.  

JavaScript原型,原型鏈 ? 有什麼特色?

* 原型對象也是普通的對象,是對象一個自帶隱式的 __proto__ 屬性,原型也有可能有本身的原型,若是一個原型對象的原型不爲null的話,咱們就稱之爲原型鏈。
* 原型鏈是由一些用來繼承和共享屬性的對象組成的(有限的)對象鏈。
* JavaScript的數據對象有那些屬性值?
  writable:這個屬性的值是否能夠改。
  configurable:這個屬性的配置是否能夠刪除,修改。
  enumerable:這個屬性是否能在for…in循環中遍歷出來或在Object.keys中列舉出來。
  value:屬性值。
 
*當咱們須要一個屬性的時,Javascript引擎會先看當前對象中是否有這個屬性, 若是沒有的話,就會查找他的Prototype對象是否有這個屬性。
function clone(proto) {
  function Dummy() { }
  Dummy.prototype = proto;
  Dummy.prototype.constructor = Dummy;
  return new Dummy(); //等價於Object.create(Person);
}
        function object(old) {
         function F() {};
         F.prototype = old;
         return new F();
        }
    var newObj = object(oldObject);
  1.  

 

eval是作什麼的?

它的功能是把對應的字符串解析成JS代碼並運行;
eval2應該避免使用,不安全,很是耗性能(次,一次解析成js語句,一次執行)。

null,undefined 的區別?

寫一個通用的事件偵聽器函數。

// event(事件)工具集,來源:github.com/markyun   
    markyun.Event = {
// 頁面加載完成後       
function(fn)         readyEvent :{
ifnull           (fn==) {
document                fn=;
            }
varwindow           oldonload =.onload;
iftypeofwindow'function'           (.onload !=) {
window                .onload = fn;
else            }{
windowfunction()                .onload ={
                    oldonload();
                    fn();
                };
            }
        },
// 視能力分別使用dom0||dom2||IE方式 來綁定事件       
// 參數: 操做的元素,事件名稱 ,事件處理程序       
function(element, type, handler)         addEvent :{
if           (element.addEventListener) {
//事件類型、須要執行的函數、是否捕捉               
false                element.addEventListener(type, handler,);
elseif            }(element.attachEvent) {
'on'function()                 element.attachEvent(+ type,{
                    handler.call(element);
                });
else            }{
'on'                element[+ type] = handler;
            }
        },
// 移除事件       
function(element, type, handler)         removeEvent :{
if           (element.removeEnentListener) {
false                element.removeEnentListener(type, handler,);
elseif            }(element.datachEvent) {
'on'                element.detachEvent(+ type, handler);
else            }{
'on'null                element[+ type] =;
            }
        },
// 阻止事件 (主要是事件冒泡,由於IE不支持事件捕獲)       
function(ev)         stopPropagation :{
if           (ev.stopPropagation) {
                ev.stopPropagation();
else            }{
true                ev.cancelBubble =;
            }
        },
// 取消事件的默認行爲       
function(event)         preventDefault :{
if           (event.preventDefault) {
                event.preventDefault();
else            }{
false                event.returnValue =;
            }
        },
// 獲取事件目標       
function(event)         getTarget :{
return           event.target || event.srcElement;
        },
// 獲取event對象的引用,取到事件的全部信息,確保隨時能使用event;       
function(e)         getEvent :{
varwindow           ev = e ||.event;
if           (!ev) {
varthis               c =.getEvent.caller;
while               (c) {
0                    ev = c.arguments[];
if                   (ev && Event == ev.constructor) {
break                       ;
                    }
                    c = c.caller;
                }
            }
return            ev;
        }
    };

Node.js的適用場景?

高併發、聊天、實時消息推送

介紹js的基本數據類型。

stringobjectnumber,,boolean,,undefined

Javascript如何實現繼承?

經過原型和構造器

["1", "2", "3"].map(parseInt) 答案是多少?

1NaNNaNparseInt3 [,,]由於須要兩個參數 (val, radix) 但 map 傳了個 (element, index, array)

如何建立一個對象? (畫出此對象的內存圖)

function Person(name, age)  {
this   .name = name;
this   .age = age;
thisfunction() this   .sing ={ alert(.name) }
  }

談談This對象的理解。

thisthis是js的一個關鍵字,隨着函數使用場合不一樣,的值會發生變化。
this可是有一個總原則,那就是指的是調用函數的那個對象。
thisthis通常狀況下:是全局對象Global。 做爲方法調用,那麼就是指這個對象

事件是?IE與火狐的事件機制有什麼區別? 如何阻止冒泡?

 1.咱們在網頁中的某個操做(有的操做對應多個事件)。例如:當咱們點擊一個按鈕就會產生一個事件。是能夠被 JavaScript 偵測到的行爲。 
 2.事件處理機制:IE是事件冒泡、火狐是 事件捕獲;
 3. ev.stopPropagation();

什麼是閉包(closure),爲何要用它?

執行say667()後,say667()閉包內部變量會存在,而閉包內部函數的內部變量不會存在.使得Javascript的垃圾回收機制GC不會收回say667()所佔用的資源,由於say667()的內部函數的執行須要依賴say667()中的變量。這是對閉包做用的很是直白的描述.
 
閉包就是可以讀取其餘函數內部變量的函數, 能夠把閉包簡單理解成"定義在一個函數內部的函數"。

閉包的用途:①能夠讀取函數內部的變量②可讓變量始終保持在內存中

閉包的優勢:
(1)不增長額外的全局變量,
(2)執行過程當中全部變量都是在匿名函數內部。
閉包的缺點:

(1)因爲閉包會使得函數中的變量都被保存在內存中,內存消耗很大,因此不能濫用閉包,不然會形成網頁的性能問題,在IE中可能致使內存泄露。解決方法是,在退出函數以前,將不使用的局部變量所有刪除。

(2) 閉包會在父函數外部,改變父函數內部變量的值。不要隨便改變父函數內部變量的值。

 
function say667()  {
// Local variable that ends up within closure   
var666   num =;
varfunction()    sayAlert ={ alert(num); }
    num++;
return   sayAlert;
}
 
var sayAlert = say667();
//執行結果應該彈出的667   sayAlert()
  1. 1.   如何判斷一個對象是否屬於某個類?
instanceof 使用(待完善)
 
ifinstanceof  (aPerson){
'yes'       alert();
   }

new操做符具體幹了什麼呢?

1this    、建立一個空對象,而且變量引用該對象,同時還繼承了該函數的原型。
2this    、屬性和方法被加入到引用的對象中。
3thisthis    、新建立的對象由所引用,而且最後隱式的返回。
varobj  = {};
obj.__proto__ = Base.prototype;
Base.call(obj);

Javascript中,有一個函數,執行時對象查找時,永遠不會去查找原型,這個函數是?

hasOwnProperty

JSON 的瞭解?

JSONObject(JavaScriptNotation)是一種輕量級的數據交換格式。
它是基於JavaScript的一個子集。數據格式簡單, 易於讀寫, 佔用帶寬小
'age''12''name''back'{:,:}

js延遲加載的方式有哪些?

asyncdefer和、動態建立DOM方式(用得最多)、按需異步載入js

ajax 是什麼?

Ajax是什麼:AJAX即「Asynchronous Javascript And XML」(異步JavaScript和XML),是指一種建立交互式網頁應用的網頁開發技術。

ajax 是什麼?ajax 的交互模型?同步和異步的區別?如何解決跨域問題?

 

待完善

  1.經過異步模式,提高了用戶體驗
  2.優化了瀏覽器和服務器之間的傳輸,減小沒必要要的數據往返,減小了帶寬佔用
  3. Ajax在客戶端運行,承擔了一部分原本由服務器承擔的工做,減小了大用戶量下的服務器負載。
  2. Ajax的最大的特色是什麼。
  Ajax能夠實現動態不刷新(局部刷新)
  readyState屬性 狀態 有5個可取值: 0=未初始化 ,1=正在加載 2=以加載,3=交互中,4=完成

 

ajax的缺點

 

  1、ajax不支持瀏覽器back按鈕。
 
  2、安全問題 AJAX暴露了與服務器交互的細節。
 
  3、對搜索引擎的支持比較弱。
 
  4、破壞了程序的異常機制。
 
  5、不容易調試。

 

跨域: jsonp、 iframe、window.name、window.postMessage、服務器上設置代理頁面

 

同步和異步的區別?

同步是指: 發送方發出數據後,等接收方發回響應之後才發下一個數據包的通信方式。

 
異步是指:發送方發出數據後,不等接收方發回響應,接着發送下個數據包的通信方式。

 

如何解決跨域問題?

windowwindowjsonp、 iframe、.name、.postMessage、服務器上設置代理頁面

模塊化怎麼作?

當即執行函數,不暴露私有成員

varfunction()   module1 = ({
var0       _count =;
varfunction()       m1 ={
//...         
       };
varfunction()       m2 ={
//...         
       };
return       {
         m1 : m1,
         m2 : m2
       };
     })();

異步加載的方式有哪些?

1  () defer,只支持IE
 
2async  ():
 
3  ()建立script,插入到DOM中,加載完畢後callBack

documen.write和 innerHTML的區別

document.write只能重繪整個頁面

innerHTML能夠重繪頁面的一部分

.call() 和 .apply() 的區別?

sub,add.call(sub,3,1) == add(3,1) ,因此運行結果爲:alert(4); 例子中用 add 來替換
 
 注意:js 中的函數實際上是對象,函數名是對 Function 對象的引用。
 
    function add(a,b)
    {
        alert(a+b);
    }
 
sub(a,b)    function
    {
        alert(a-b);
    }
 
sub,3,1);    add.call( 

Jquery與jQuery UI 有啥區別?

*jQuery是一個js庫,主要提供的功能是選擇器,屬性修改和事件綁定等等。
*jQuery UI則是在jQuery的基礎上,利用jQuery的擴展性,設計的插件。
 提供了一些經常使用的界面元素,諸如對話框、拖動行爲、改變大小行爲等等

jquery 中如何將數組轉化爲json字符串,而後再轉化回來?

jQuery中沒有提供這個功能,因此你須要先編寫兩個jQuery的擴展:

function(array)     $.fn.stringifyArray ={
returnJSON       .stringify(array)
    }
 
function(array)     $.fn.parseArray ={
returnJSON       .parse(array)
    }
 
   而後調用:
""    $().stringifyArray(array)

針對 jQuery 的優化方法?

*基於Class的選擇性的性能相對於Id選擇器開銷很大,由於需遍歷全部DOM元素。
 
*頻繁操做的DOM,先緩存起來再操做。用Jquery的鏈式調用更好。  
$("a""href" 好比:var str=).attr();
 
forlength*(var i = size; i < arr.; i++) {}
forlength 循環每一次循環都查找了數組 (arr) 的.屬性,在開始循環的時候設置一個變量來存儲這個數字,可讓循環跑得更快:
forlengthlengthlength (var i = size,= arr.; i <; i++) {}

那些操做會形成內存泄漏?

內存泄漏指任何對象在您再也不擁有或須要它以後仍然存在。
0垃圾回收器按期掃描對象,並計算引用了每一個對象的其餘對象的數量。若是一個對象的引用數量爲(沒有其餘對象引用過該對象),或對該對象的唯一引用是循環的,那麼該對象的內存便可回收。
setTimeout的第一個參數使用字符串而非函數的話,會引起內存泄漏。
閉包、控制檯日誌、循環(在兩個對象彼此引用且彼此保留時,就會產生一個循環)

如何判斷當前腳本運行在瀏覽器仍是node環境中?

windowwindow經過判斷Global對象是否爲,若是不爲,當前腳本沒有運行在瀏覽器中

  請寫出一個獲取5位數隨機數的方法,要求最大數字不超過99999

  1. function GetRandomNum(Min,Max)

    {

        var Range = Max - Min;

        var Rand = Math.random();

        return(Min + Math.round(Rand * Range));

    }

    var num = GetRandomNum(1,99999);

alert(num);

寫一個時鐘:格式爲hh mm ss

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>簡易網頁時鐘</title>

<style>

body,div{margin:0;padding:0;}

body{color:#fff;font:16px/1.5 \5fae\8f6f\96c5\9ed1;}

#clock{width:300px;text-align:center;background:#1a1a1a;margin:10px auto;padding:20px 0;}

span{color:#000;width:80px;line-height:2;background:#fbfbfb;border:2px solid #b4b4b4;margin:0 10px;padding:0 10px;}

</style>

<script>

window.onload = function ()

{

       var oClock = document.getElementById("clock");

       var aSpan = oClock.getElementsByTagName("span");

             

       setInterval(getTimes, 1000);

       getTimes();

       function getTimes ()

       {

              var oDate = new Date();

              var aDate = [oDate.getHours(), oDate.getMinutes(), oDate.getSeconds()];

              for (var i in aDate) aSpan[i].innerHTML = format(aDate[i])

       }

       function format(a)

       {

              return a.toString().replace(/^(\d)$/, "0$1")     

       }

}

</script>

</head>

<body>

<div id="clock">

       <span></span>點<span></span>分<span></span>秒

</div>

</body>

</html>

 

四、如何阻止冒泡和默認事件?

經過使用 preventDefault() 方法只取消默認的行爲。
jQuery 代碼:

.代碼以下:


$("form").bind(
  "submit",
  function(event){
    event.preventDefault();
  }
);

經過使用 stopPropagation() 方法只阻止一個事件起泡。
jQuery 代碼:

.代碼以下:


$("form").bind(
  "submit",
  function(event){
    event.stopPropagation();
  }
);

 

19.請指出「get()」「[]」「eq()」的區別?

答:仔細查看下API文檔就能夠知道。eq返回的是一個jquery對象,get返回的是一個html 對象數組。舉個例子:

<p style"color:yellow"></p>=緋雨

使用eq來得到第一個p標籤的color值:

$"p".eq0.css"color"//由於eq(num)返回的是個jq對象,因此能夠用jq的方法css()()()  

使用get來得到第一個p標籤的color值:

$"p".get0//由於get(num)返回的是個html對象,因此要使用傳統的HTML對象方法,jq對象此時就沒用了。()().style.color  

固然,你也能夠get(num)後把對象轉爲jq的對象再進行操做:

$$"p".get0.css"color"(()())()
 

20.請說出你能夠傳遞到jQuery方法的四種不一樣值。

答:選擇器(字符串),HTML(字符串),回調函數,HTML元素,對象,數組,元素數組,jQuery對象等。

對Node的優勢和缺點提出了本身的見解:

    *(優勢)由於Node是基於事件驅動和無阻塞的,因此很是適合處理併發請求,
     所以構建在Node上的代理服務器相比其餘技術實現(如Ruby)的服務器表現要好得多。
     此外,與Node代理服務器交互的客戶端代碼是由javascript語言編寫的,
     所以客戶端和服務器端都用同一種語言編寫,這是很是美妙的事情。
 
    *(缺點)Node是一個相對新的開源項目,因此不太穩定,它老是一直在變,
     並且缺乏足夠多的第三方庫支持。看起來,就像是Ruby/Rails當年的樣子。

 

其餘問題

對Node的優勢和缺點提出了本身的見解?

*(優勢)由於Node是基於事件驅動和無阻塞的,因此很是適合處理併發請求,
 所以構建在Node上的代理服務器相比其餘技術實現(如Ruby)的服務器表現要好得多。
 此外,與Node代理服務器交互的客戶端代碼是由javascript語言編寫的,
 所以客戶端和服務器端都用同一種語言編寫,這是很是美妙的事情。
 
*(缺點)Node是一個相對新的開源項目,因此不太穩定,它老是一直在變,
 並且缺乏足夠多的第三方庫支持。看起來,就像是Ruby/Rails當年的樣子。

你有哪些性能優化的方法?

 (看雅虎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) 圖片預加載,將樣式表放在頂部,將腳本放在底部  加上時間戳。
 
 (8) 避免在頁面的主體佈局中使用table,table要等其中的內容徹底下載以後纔會顯示出來,顯示比div+css佈局慢。

http狀態碼有那些?分別表明是什麼意思?

100-199用於指定客戶端應相應的某些動做。
200-299用於表示請求成功。
300-399用於已經移動的文件而且常被包含在定位頭信息中指定新的地址信息。
400-499用於指出客戶端的錯誤。400    一、語義有誤,當前請求沒法被服務器理解。401   當前請求須要用戶驗證 403  服務器已經理解請求,可是拒絕執行它。
500-599用於支持服務器錯誤。 503 – 服務不可用

一個頁面從輸入 URL 到頁面加載顯示完成,這個過程當中都發生了什麼?(流程說的越詳細越好)

   查找瀏覽器緩存
    DNS解析、查找該域名對應的IP地址、重定向(301)、發出第二個GET請求
   進行HTTP協議會話
   客戶端發送報頭(請求報頭)
   服務器回饋報頭(響應報頭)
    html文檔開始下載
   文檔樹創建,根據標記請求所需指定MIME類型的文件
   文件顯示
    [
   瀏覽器這邊作的工做大體分爲如下幾步:
 
   加載:根據請求的URL進行域名解析,向服務器發起請求,接收文件(HTML、JS、CSS、圖象等)。
 
   解析:對加載到的資源(HTML、JS、CSS等)進行語法解析,建議相應的內部數據結構(好比HTML的DOM樹,JS的(對象)屬性表,CSS的樣式規則等等)
    }

對前端界面工程師這個職位是怎麼樣理解的?它的前景會怎麼樣?

    前端是最貼近用戶的程序員,比後端、數據庫、產品經理、運營、安全都近。
    1、實現界面交互
    2、提高用戶體驗
    3、有了Node.js,前端能夠實現服務端的一些事情
 
前端是最貼近用戶的程序員,前端的能力就是能讓產品從 90分進化到 100 分,甚至更好,
 
 參與項目,快速高質量完成實現效果圖,精確到1px;
 
 與團隊成員,UI設計,產品經理的溝通;
 
 作好的頁面結構,頁面重構和用戶體驗;
 
 處理hack,兼容、寫出優美的代碼格式;
 
 針對服務器的優化、擁抱最新前端技術。

平時如何管理你的項目?

       先期團隊必須肯定好全局樣式(globe.css),編碼模式(utf-8) 等;
 
       編寫習慣必須一致(例如都是採用繼承式的寫法,單樣式都寫成一行);
 
       標註樣式編寫人,各模塊都及時標註(標註關鍵樣式調用的地方);
 
       頁面進行標註(例如 頁面 模塊 開始和結束);
 
        CSS跟HTML 分文件夾並行存放,命名都得統一(例如style.css);
 
        JS分文件夾存放 命名以該JS功能爲準的英文翻譯。
 
       圖片採用整合的 images.png png8 格式文件使用 儘可能整合在一塊兒使用方便未來的管理

說說最近最流行的一些東西吧?常去哪些網站?

npm    Node.js、Mongodb、、MVVM、MEAN、three.js

移動端(Android IOS)怎麼作好用戶體驗?

   清晰的視覺縱線、信息的分組、極致的減法、
   利用選擇代替輸入、標籤及文字的排布方式、
   依靠明文確認密碼、合理的鍵盤利用、

前端頁面有哪三層構成,分別是什麼?做用是什麼?

最準確的網頁設計思路是把網頁分紅三個層次,即:結構層、表示層、行爲層。

網頁的結構層(structural layer由 HTML 或 XHTML 之類的標記語言負責建立。標籤,也就是那些出如今尖括號裏的單詞,對網頁內容的語義含義作出了描述,但這些標籤不包含任何關於如何顯示有關內容的信息。例如,P 標籤表達了這樣一種語義:「這是一個文本段。」

網頁的表示層(presentation layer 由 CSS 負責建立。 CSS 對「如何顯示有關內容」的問題作出了回答。

網頁的行爲層(behavior layer負責回答「內容應該如何對事件作出反應」這一問題。這是 Javascript 語言和 DOM 主宰的領域。

頁面重構怎麼操做?

編寫 CSS、讓頁面結構更合理化,提高用戶體驗,實現良好的頁面效果和提高性能。

 

網站爲何要進行重構(網站重構的好處)

a、使頁面加載得更快速;

b、下降帶寬帶來的費用:節約成本;

c、讓你在修改設計時更有效率而代價更低;                         

d、幫助你的整個站點保持視覺的一致性;

e、更利於搜索引擎的檢索(符合SEO的規範);

f、令站點更容易被各類瀏覽器和用戶訪問(包括手機、PDA和殘障人士使用的文字瀏覽器);

g、兼容不容忽視的Mozilla系瀏覽器(Firefox份額);

h、提升你的職場競爭實力(事實上也就是下降失業的風險)。

什麼叫優雅降級和漸進加強?

優雅降級:Web站點在全部新式瀏覽器中都能正常工做,若是用戶使用的是老式瀏覽器,則代碼會檢查以確認它們是否能正常工做。因爲IE獨特的盒模型佈局問題,針對不一樣版本的IE的hack實踐過優雅降級了,爲那些沒法支持功能的瀏覽器增長候選方案,使之在舊式瀏覽器上以某種形式降級體驗卻不至於徹底失效.
 
漸進加強:從被全部瀏覽器支持的基本功能開始,逐步地添加那些只有新式瀏覽器才支持的功能,向頁面增長無害於基礎瀏覽器的額外樣式和功能的。當瀏覽器支持時,它們會自動地呈現出來併發揮做用。

WEB應用從服務器主動推送Data到客戶端有那些方式?

    html5 websoket
    WebSocket經過Flash
    XHR長時間鏈接
    XHR Multipart Streaming
   不可見的Iframe
    <script>標籤的長時間鏈接(可跨域)

html,xhtml,xml的區別介紹

html(超文本標記語言)——xhtml(可擴展性超文本標記語言)——xml(可擴展性標記語言); html: 1.對大小寫不敏感; 2.標籤沒必要成對出現; 3.<br>; xhtml: 1.對大小寫敏感,必須是小寫的; 2.標籤必須成對出現,有開始標籤就必須有結束標籤; 3.屬性值必須在引號以內; 4.不支持屬性最小化: eg:正確:<input checked='checked'> 錯誤:<input checked> 5.name屬性不同意使用,之後會被淘汰; 6.空元素也要結束標籤:如:<br/>,<hr/>(水平分割線) xml: html最終會發展到xml,xhtml是html想xml發展的一個過渡,xhtml的特性也適合xml;

相關文章
相關標籤/搜索