好程式設計師web前端教程分享JavaScript面試題

好程式設計師IT發表於2019-11-08

   好程式設計師web前端教程分享JavaScript面試題

   1、JavaScript this指標、閉包、作用域

  this:指向呼叫上下文

  閉包:內層作用域可以訪問外層作用域的變數

  作用域:定義一個函式就開闢了一個區域性作用域,整個js執行環境有一個全域性作用域

   2、JavaScript的同源策略

  一段指令碼只能讀取來自於同一來源的視窗和文件的屬性,這裡的同一來源指的是主機名、協議和埠號的組合

  http,ftp:協議

  主機名;localhost

  埠名:80:http協議的預設埠

  https:預設埠是8083

  同源策略帶來的麻煩:ajax在不同域名下的請求無法實現,

  如果說想要請求其他來源的js檔案,或者json資料,那麼可以透過jsonp來解決

   3、看下列程式碼,輸出什麼?解釋原因

  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。

   4、請你談談Cookie的弊端

  1.`Cookie`數量和長度的限制。每個domain最多隻能有20條cookie,每個cookie長度不能超過4KB,否則會被截掉。

  2.安全性問題。如果cookie被人攔截了,那人就可以取得所有的session資訊。即使加密也與事無補,因為攔截者並不需要知道cookie的意義,他只 要原樣轉發cookie就可以達到目的了。

  3.有些狀態不可能儲存在客戶端。例如,為了防止重複提交表單,我們需要在伺服器端儲存一個計數器。如果我們把這個計數器儲存在客戶端,那麼 它起不到任何作用。

   5、哪些操作會造成記憶體洩漏?

  記憶體洩漏指任何物件在您不再擁有或需要它之後仍然存在。

  垃圾回收器定期掃描物件,並計算引用了每個物件的其他物件的數量。如果一個物件的引用數量為0(沒有其他物件引用過該物件),或對該物件的 惟一引用是迴圈的,那麼該物件的記憶體即可回收。

  1. setTimeout 的第一個引數使用字串而非函式的話,會引發記憶體洩漏。

  2. 閉包

  3. 控制檯日誌

  4. 迴圈(在兩個物件彼此引用且彼此保留時,就會產生一個迴圈)

  6、輸出多少?

  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。

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2663198/,如需轉載,請註明出處,否則將追究法律責任。

相關文章