好程序員web前端教程分享JavaScript面試題前端
一、JavaScript this指針、閉包、做用域程序員
this:指向調用上下文web
閉包:內層做用域能夠訪問外層做用域的變量面試
做用域:定義一個函數就開闢了一個局部做用域,整個js執行環境有一個全局做用域ajax
二、JavaScript的同源策略json
一段腳本只能讀取來自於同一來源的窗口和文檔的屬性,這裏的同一來源指的是主機名、協議和端口號的組合安全
http,ftp:協議服務器
主機名;localhostcookie
端口名:80:http協議的默認端口session
https:默認端口是8083
同源策略帶來的麻煩:ajax在不一樣域名下的請求沒法實現,
若是說想要請求其餘來源的js文件,或者json數據,那麼能夠經過jsonp來解決
三、看下列代碼,輸出什麼?解釋緣由
var undefined;//此時undefined這個變量的值是undefined
undefined == null; // true
1 == true; // true
此時會把布爾類型的值轉換爲數字類型 true=1 false=0
2 == true; // false
0 == false; // true
0 == ''; // true
NaN == NaN; // false
[] == false; // true
[] == ![]; // true
undefined與null相等,但不恆等(===)
一個是number一個是string時,會嘗試將string轉換爲number
嘗試將boolean轉換爲number,0或1
嘗試將Object轉換成number或string,取決於另一個對比量的類型
因此,對於0、空字符串的判斷,建議使用 「===」 。「===」會先判斷兩邊的值類型,類型不匹配時爲false。
四、請你談談Cookie的弊端
1.`Cookie`數量和長度的限制。每一個domain最多隻能有20條cookie,每一個cookie長度不能超過4KB,不然會被截掉。
2.安全性問題。若是cookie被人攔截了,那人就能夠取得全部的session信息。即便加密也與事無補,由於攔截者並不須要知道cookie的意義,他只 要原樣轉發cookie就能夠達到目的了。
3.有些狀態不可能保存在客戶端。例如,爲了防止重複提交表單,咱們須要在服務器端保存一個計數器。若是咱們把這個計數器保存在客戶端,那麼 它起不到任何做用。
五、哪些操做會形成內存泄漏?
內存泄漏指任何對象在您再也不擁有或須要它以後仍然存在。
垃圾回收器按期掃描對象,並計算引用了每一個對象的其餘對象的數量。若是一個對象的引用數量爲0(沒有其餘對象引用過該對象),或對該對象的 唯一引用是循環的,那麼該對象的內存便可回收。
1. setTimeout 的第一個參數使用字符串而非函數的話,會引起內存泄漏。
2. 閉包
3. 控制檯日誌
4. 循環(在兩個對象彼此引用且彼此保留時,就會產生一個循環)
六、輸出多少?
var a = 6;
setTimeout(function () {
var a = 666;//因爲變量a是一個局部變量
alert(a); // 輸出666,
}, 1000);
a = 66;
由於var a = 666;定義了局部變量a,而且賦值爲666,根據變量做用域鏈,
全局變量處在做用域末端,優先訪問了局部變量,從而覆蓋了全局變量。
var a = 6;
setTimeout(function () {
//變量聲明提早
alert(a); // 輸出undefined
var a = 666;
}, 1000);
a = 66;
由於var a = 666;定義了局部變量a,一樣覆蓋了全局變量,可是在alert(a);以前
a並未賦值,因此輸出undefined。