中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

關于前端面試題的案例分析

發布時間:2020-08-05 11:49:18 來源:億速云 閱讀:308 作者:小新 欄目:編程語言

小編給大家分享一下關于前端面試題的案例分析,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

1、什么是閉包?

概念

閉包是一個過程,它記住了聲明scope下的變量,在別的scope下,調用函數時 ,依然可以讀取到這些變量。

原理分析

function outer(){
let n = 1;
function inner(){
  console.log(n);
}
return inner;
}
const fn = outer();
fn();

以上案例,提出來的問題是:outer執行結束之后,函數空間消亡了,inner的n為什么還有值?原理是什么?

在我的理解里,閉包可以想象成一個膠囊(persistent lexical scope data \ back pack),包裹住了變量n粘在函數inner上,一起返回給了fn,在memory中開辟一個存儲空間放置這個膠囊。如果代碼中有fn在執行,它會一直訪問這個膠囊里的n值。什么時候不再有fn了,什么時候這個膠囊脫落掉消亡。

用途

兩個用途:不污染global的變量池和變量值的暫存

2、 let和var的區別,let的產生背景?

區別

這兩個關鍵詞的最關鍵的區別是scope,var是認定的scope不包含for,if等這類函數塊的,let把for,if等函數塊認定為一個scope。

目的

有一些需要在函數塊中記住變量屬性的表達式,ES5需要加上花括號,這樣子嵌套的層級會很多。ES6的時候就發明了let來簡化代碼。

3、 var的變量提升底層原理是什么?

本質上是由JS編譯過程導致的。

代碼的執行分為兩個步驟

對聲明進行編譯——為var或function分配地址內存。

執行——進行正常的賦值。

例如var a = 2; 編譯器先不會管a = 2這一賦值步驟。它最先要做的是把var a編譯掉,而運算操作留在原地。聲明在編譯角度上被移動到了作用域的頂端。這就是提升的底層原理。

拓展話題——TDZ暫時死區

aVar的值符合提升的原則。aLet就有點意思了,它拋出來的錯誤實際上就是暫時死區錯誤。簡單來說,從聲明到到let的運算步驟為止的這段時空被鎖死,外界在此期間尋求訪問,不被允許。

4、 模塊化思想

為什么要使用模塊化?

模塊化思想即最小暴露原則。隱藏掉別人不需要知道的代碼細節,僅提供需要使用的API。保護代碼的安全性和可維護性。

如何模塊化?

書寫一段模塊的要點有二:1、要使用閉包原理。2、函數至少被調用執行過一次。

方法一:工廠模式

function module(){
   let text = "baz";
   let publicAPI = {
       baz: fuction (){
           console.log(text);
       }
   }
   
   return publicAPI;
}
var foo = module();
foo.bar();

方法二:單例模式(IIFE)

var foo = (function module(){
    let text = "baz";
    let publicAPI = {
        baz: function(){
     console.log(text);
    }
    return pubilcAPI;
 }
})();
foo.bar()

看完了這篇文章,相信你對關于前端面試題的案例分析有了一定的了解,想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

名山县| 湘潭县| 三台县| 陕西省| 什邡市| 漳州市| 吴江市| 安平县| 文山县| 肥西县| 长武县| 江阴市| 丰都县| 林西县| 临颍县| 莫力| 新龙县| 屯留县| 罗定市| 个旧市| 长白| 砚山县| 茶陵县| 灵璧县| 茌平县| 海城市| 江西省| 固阳县| 宜良县| 自治县| 霍城县| 高唐县| 廊坊市| 荔波县| 梨树县| 天镇县| 北海市| 松原市| 济源市| 镇安县| 普兰店市|