亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

閉包面試題原題

plokmju88 / 607人閱讀

摘要:閉包面試題原題第一個(gè)例子返回返回返回返回第二個(gè)例子第三個(gè)例子一關(guān)于這個(gè)函數(shù)的執(zhí)行過程先大致說一下這個(gè)函數(shù)的執(zhí)行過程初始化一個(gè)具名函數(shù),具名函數(shù)就是有名字的函數(shù),名字叫。

閉包面試題原題
function fun(n, o) { // ① 
  console.log(o);
  return { // ② 
    fun: function(m) { // ③ 
      return fun(m, n); // ④ 
    }
  };
}

// 第一個(gè)例子
var a = fun(0); // 返回undefined
a.fun(1); // 返回 ?
a.fun(2); // 返回 ?
a.fun(3); // 返回 ?

// 第二個(gè)例子
var b = fun(0)
  .fun(1)
  .fun(2)
  .fun(3); //undefined,?,?,?

// 第三個(gè)例子
var c = fun(0).fun(1);
c.fun(2);
c.fun(3); //undefined,?,?,?
一、關(guān)于這個(gè)函數(shù)的執(zhí)行過程

先大致說一下這個(gè)函數(shù)的執(zhí)行過程:

① 初始化一個(gè)具名函數(shù),具名函數(shù)就是有名字的函數(shù),名字叫 fun。

② 第一個(gè) fun 具名函數(shù)執(zhí)行之后會返回一個(gè)對象字面量表達(dá)式,即返回一個(gè)新的object對象。

{ // 這是一個(gè)對象,這是對象字面量表達(dá)式創(chuàng)建對象的寫法,例如{a:11,b:22}
fun: function(m) {

return fun(m, n); 

}
}
③ 返回的對象里面含有fun這個(gè)屬性,并且這個(gè)屬性里面存放的是一個(gè)新創(chuàng)建匿名函數(shù)表達(dá)式function(m) {}。

④ 在③里面創(chuàng)建的匿名函數(shù)會返回一個(gè)叫 fun 的具名函數(shù)return fun(m, n);,這里需要說明一下這個(gè) fun 函數(shù)返回之后的執(zhí)行過程:

返回 fun 函數(shù),但默認(rèn)不執(zhí)行,因?yàn)樵?js 里面,函數(shù)是可以保存在變量里面的。

如果想要執(zhí)行 fun 函數(shù),那么首先會在當(dāng)前作用域?qū)ふ医衒un 名字的具名函數(shù),但是因?yàn)楫?dāng)前作用域里 fun 名字的函數(shù)是沒有被定義的,所以會自動往上一級查找。
2.1 注解:當(dāng)前的作用域里是一個(gè)新創(chuàng)建的對象,并且對象里面只有 fun 屬性,而沒有 fun 具名函數(shù)
2.2 注解:js 作用域鏈的問題,會導(dǎo)致他會不斷地往上級鏈查找。

在當(dāng)前作用域沒找到,所以一直往上層找,直到找到了頂層的 fun函數(shù),然后執(zhí)行這個(gè)頂層的 fun 函數(shù)。

然后這兩個(gè) fun 函數(shù)會形成閉包,第二個(gè) fun 函數(shù)會不斷引用第一個(gè) fun 函數(shù),從而導(dǎo)致一些局部變量例如 n,o 得以保存。

所謂閉包:各種解釋都有,但都不是很接地氣,簡單的來說就是在 js 里面,有一些變量(內(nèi)存)可以被不斷的引用,導(dǎo)致了變量(內(nèi)存)沒有被釋放和回收,從而形成了一個(gè)獨(dú)立的存在,這里涉及了js 的作用域鏈和 js 回收機(jī)制,結(jié)合兩者來理解就可以了。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/97098.html

相關(guān)文章

  • 一道js閉包面試題的學(xué)習(xí)

    摘要:然后最外層這個(gè)函數(shù)會返回一個(gè)新對象,對象里面有一個(gè)屬性,名為,而這個(gè)屬性的值是一個(gè)匿名函數(shù),它會返回。 最近看到一條有意思的閉包面試題,但是看到原文的解析,我自己覺得有點(diǎn)迷糊,所以自己重新做一下這條題目。 閉包面試題原題 function fun(n, o) { // ① console.log(o); return { // ② fun: function(m) ...

    plus2047 評論0 收藏0
  • 2019春招前端實(shí)習(xí)面經(jīng)總結(jié)

    摘要:春招前端實(shí)習(xí)面試記錄從就開始漸漸的進(jìn)行復(fù)習(xí),月末開始面試,到現(xiàn)在四月中旬基本宣告結(jié)束。上海愛樂奇一面盒模型除之外的面向?qū)ο笳Z言繼承因?yàn)槭且曨l面試,只記得這么多,只感覺考察的面很廣,前端后端移動端都問了,某方面也有深度。 春招前端實(shí)習(xí)面試記錄(2019.3 ~ 2019.5) 從2019.1就開始漸漸的進(jìn)行復(fù)習(xí),2月末開始面試,到現(xiàn)在四月中旬基本宣告結(jié)束。在3月和4月經(jīng)歷了無數(shù)次失敗,沮...

    atinosun 評論0 收藏0
  • JavaScript算法題:查找數(shù)字在數(shù)組中的索引

    摘要:我們必須對數(shù)字?jǐn)?shù)組進(jìn)行升序排序,并找出給定數(shù)字在該數(shù)組中的位置。算法說明將值第二個(gè)參數(shù)插入到數(shù)組第一個(gè)參數(shù)中,并返回其在排序后的數(shù)組中的最低索引。我們的目標(biāo)是將輸入的數(shù)字在輸入數(shù)組后中排序后,再返回它的索引。 翻譯:瘋狂的技術(shù)宅原文:https://medium.freecodecamp.o... 本文首發(fā)微信公眾號:前端先鋒歡迎關(guān)注,每天都給你推送新鮮的前端技術(shù)文章 編寫算法時(shí)...

    darkerXi 評論0 收藏0
  • JS三部曲,變量提升,this與作用域,閉包

    摘要:這篇文章總結(jié)下之前看的文章和自己在工作中遇到的坑,純手寫的,有什么寫的不對的請多多提出修正哈變量提升何為變量提升里面的變量在聲明之前就可以使用,因?yàn)樵撀暶饕呀?jīng)被提升至該作用域函數(shù)或全局的頂部直接上代碼和都會變量提升優(yōu)先級上面可理解為函數(shù)這時(shí) 這篇文章總結(jié)下之前看的文章和自己在工作中遇到的坑,純手寫的,有什么寫的不對的請多多提出修正哈 變量提升 何為變量提升?js里面的變量在聲明之前就可...

    dongxiawu 評論0 收藏0
  • 令人費(fèi)解的 async/await 執(zhí)行順序

    摘要:問題的關(guān)鍵在于其執(zhí)行過程中的微任務(wù)數(shù)量,下文中我們需要用上述代碼中的方式對微任務(wù)的執(zhí)行順序進(jìn)行標(biāo)記,以輔助我們理解這其中的執(zhí)行過程。 原文發(fā)布在掘金社區(qū):https://juejin.im/post/5c3cc981f265da616a47e028 起源 2019年了,相信大家對 Promise 和 async/await 都不再陌生了。 前幾日,我在社區(qū)讀到了一篇關(guān)于 async/...

    WilsonLiu95 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<