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

一、爲何用Nodejs,它有哪些優缺點?

優勢:
事件驅動,經過閉包很容易實現客戶端的生命活期。
不用擔憂多線程,鎖,並行計算的問題
V8引擎速度很是快
對於遊戲來講,寫一遍遊戲邏輯代碼,前端後端通用
缺點:
nodejs更新很快,可能會出現版本兼容
nodejs還不算成熟,尚未大製做
nodejs不像其餘的服務器,對於不一樣的連接,不支持進程和線程操做

複製代碼

二、什麼是錯誤優先的回調函數?

錯誤優先(Error-first)的回調函數(Error-First Callback)用於同時返回錯誤和數據。
第一個參數返回錯誤,而且驗證它是否出錯;其餘參數返回數據。

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

複製代碼

三、使用NPM有哪些好處?

經過NPM,你能夠安裝和管理項目的依賴,
而且可以指明依賴項的具體版本號。
對於Node應用開發而言,
你能夠經過package.json文件來管理項目信息,
配置腳本,以及指明依賴的具體版本

複製代碼

四、在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操做符(用於從對象中刪除屬性)不能用在對象不可配置的屬性上。
當試圖刪除一個不可配置的屬性時,
非嚴格代碼將默默地失敗,
而嚴格模式將在這樣的狀況下拋出異常。

複製代碼

五、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

複製代碼
相關文章
相關標籤/搜索