最近一場面試,發現了自己很多的問題,為此做個總結。非常感謝此次的面試。嘿嘿!![]()
前端面試遇到的問題
下列代碼存在幾個變量沒有被回收?
答案是3個。第一個:全局變量i;第二個:函數變量add;第三個:局部變量i;
這兩行代碼,先用var聲明一個變量i然後指派,接着再次使用var聲明同一個變量順帶指派。畢竟var是可以重新聲明同一個變量的。
在這裡有個知識點需要了解。全局變量隻有在頁面關閉的時候才會銷毀。
是以以上兩行代碼運作後,隻有一個變量沒有被銷毀。
分析:首先定義了一個函數test,裡面有個變量x,指派3,然後列印。很簡單。接着運作這個函數,便是函數式程式設計思想的展現。
這裡的知識點是:函數裡面的局部變量,當函數運作後,裡面的變量會被銷毀。
分析:在這裡使用了閉包。結合這篇徹底搞懂JavaScript的閉包、防抖跟節流,應該便能夠徹底了解傳說中的閉包了。
這裡的知識點就是:使用閉包後,函數裡面的局部變量在函數運作後,不會被銷毀。暫時存放在全局變量中。
是以以上的變量x在test運作後不會被銷毀。
這個要跟上個區分一下,這裡雖然使用了閉包,但并沒有暫存到全局變量裡,是以沒有發揮出閉包的作用。
1、最簡單,ES5提供了一個方法。
2、instanceof
隻不過這裡有個弊端:必須要在同一個全局執行環境,是以ES5新增了Array.isArray()方法。
3、Object.prototype.toString.call()方法
拓展一下:
JavaScript中的基本資料類型:Number,String,Boolean,Undefined,Null,Object(數組,日期等),Symbol。
BFC全稱:block formmating context,直譯為”塊級格式化上下文”。我還是第一次聽到這個。
既然不知道,那隻好自己去搜尋一下喽。
BFC規範:
詳情就不多說了,請看部落格:CSS-BFC的概念及其作用
這個,我還是第一次注意到這個問題。
先看到底是什麼問題?
就這麼一行代碼
仔細看看,的确有這麼個問題:
圖檔的底部跟文字的底部不在一起。
檢視一下元素,發現圖檔并沒有設定相應的margin或者padding。
這是為啥?
查了一下,才發現圖檔預設的是display:inline;
圖檔是行内元素。行内元素有個vertical-align屬性,這個屬性預設值是:baseline,将其設定為bottom即可。
eval函數可以執行裡面的代碼。
面試完後,發現自己還挺享受面試的過程的,竟然還挺陶醉的。收獲頗多

面試官随和一點,就像聊家常一樣(不然很受拘束,會難受的
),以問答形式即可,達到那種一針見血的效果。簡單、直接、粗暴。