1. 程式人生 > >撩課-Web大前端每天5道面試題-Day23

撩課-Web大前端每天5道面試題-Day23

1、為什麼用Nodejs,它有哪些優缺點?

優點:
事件驅動,通過閉包很容易實現客戶端的生命活期。
不用擔心多執行緒,鎖,平行計算的問題
V8引擎速度非常快
對於遊戲來說,寫一遍遊戲邏輯程式碼,前端後端通用
缺點:
nodejs更新很快,可能會出現版本相容
nodejs還不算成熟,還沒有大製作
nodejs不像其他的伺服器,對於不同的連結,不支援程序和執行緒操作

 

2、什麼是錯誤優先的回撥函式?

錯誤優先(Error-first)的回撥函式(Error-First Callback)用於同時返回錯誤和資料。
第一個引數返回錯誤,並且驗證它是否出錯;其他引數返回資料。

fs.readFile(filePath, function(err, data)
{
    
if (err) { // 處理錯誤 return console.log(err); } console.log(data); });

 

3、使用NPM有哪些好處?

通過NPM,你可以安裝和管理專案的依賴,
並且能夠指明依賴項的具體版本號。
對於Node應用開發而言,
你可以通過package.json檔案來管理專案資訊,
配置指令碼,以及指明依賴的具體版本

 

4、在JavaScript原始檔的開頭包含 use strict 有什麼意義和好處?

對於這個問題,
既簡要又最重要的答案是,
use strict 是一種在JavaScript程式碼執行時自動實行更嚴格解析和錯誤處理的方法。
那些被忽略或默默失敗了的程式碼錯誤,會產生錯誤或丟擲異常。

通常而言,這是一個很好的做法。

嚴格模式的一些主要優點包括:

使除錯更加容易。
那些被忽略或默默失敗了的程式碼錯誤,會產生錯誤或丟擲異常,
因此儘早提醒你程式碼中的問題,
你才能更快地指引到它們的原始碼。
防止意外的全域性變數。

如果沒有嚴格模式,
將值分配給一個未宣告的變數會自動建立該名稱的全域性變數。
這是JavaScript中最常見的錯誤之一。
在嚴格模式下,這樣做的話會丟擲錯誤。
消除 
this 強制。 如果沒有嚴格模式, 引用null或未定義的值到 this 值會自動強制到全域性變數。 這可能會導致許多令人頭痛的問題和讓人恨不得拔自己頭髮的bug。 在嚴格模式下, 引用 null或未定義的 this 值會丟擲錯誤。 不允許重複的屬性名稱或引數值。 當檢測到物件 (例如,var object = {foo: "bar", foo: "baz"};) 中重複命名的屬性,或檢測到函式中 (例如,function foo(val1, val2, val1){})重複命名的引數時, 嚴格模式會丟擲錯誤, 因此捕捉幾乎可以肯定是程式碼中的bug可以避免浪費大量的跟蹤時間。 使eval() 更安全。 在嚴格模式和非嚴格模式下,eval() 的行為方式有所不同。 最顯而易見的是,在嚴格模式下, 變數和宣告在 eval() 語句內部的函式不會在包含範圍內建立 (它們會在非嚴格模式下的包含範圍中被建立,這也是一個常見的問題源)。 在 delete使用無效時丟擲錯誤。 delete操作符(用於從物件中刪除屬性)不能用在物件不可配置的屬性上。 當試圖刪除一個不可配置的屬性時, 非嚴格程式碼將默默地失敗, 而嚴格模式將在這樣的情況下丟擲異常。

 

5、JavaScript中的“閉包”是什麼?請舉一個例子?

閉包是一個可以訪問外部(封閉)函式作用域鏈中的變數的內部函式。

閉包可以訪問三種範圍中的變數:

這三個範圍具體為:
(1)自己範圍內的變數,
(2)封閉函式範圍內的變數,以及
(3)全域性變數。

下面是一個簡單的例子:

var globalVar = "xyz";

(function outerFunc(outerArg) {
  var outerVar = 'a';

  (function innerFunc(innerArg) {
    var innerVar = 'b';

    console.log(
      "outerArg = " + outerArg + "\n" +
      "innerArg = " + innerArg + "\n" +
      "outerVar = " + outerVar + "\n" +
      "innerVar = " + innerVar + "\n" +
      "globalVar = " + globalVar);

  })(456);
})(123);

在上面的例子中,來自於 innerFunc, 
outerFunc和全域性名稱空間的變數都在 innerFunc的範圍內。
因此,上面的程式碼將輸出如下:

outerArg = 123
innerArg = 456
outerVar = a
innerVar = b
globalVar = xyz