撩課-Web大前端每天5道面試題-Day23
阿新 • • 發佈:2019-01-01
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