摘要:閉包面試題原題第一個例子返回返回返回返回第二個例子第三個例子一關于這個函數的執行過程先大致說一下這個函數的執行過程初始化一個具名函數,具名函數就是有名字的函數,名字叫。
閉包面試題原題
function fun(n, o) { // ① console.log(o); return { // ② fun: function(m) { // ③ return fun(m, n); // ④ } }; } // 第一個例子 var a = fun(0); // 返回undefined a.fun(1); // 返回 ? a.fun(2); // 返回 ? a.fun(3); // 返回 ? // 第二個例子 var b = fun(0) .fun(1) .fun(2) .fun(3); //undefined,?,?,? // 第三個例子 var c = fun(0).fun(1); c.fun(2); c.fun(3); //undefined,?,?,?一、關于這個函數的執行過程
先大致說一下這個函數的執行過程:
① 初始化一個具名函數,具名函數就是有名字的函數,名字叫 fun。
② 第一個 fun 具名函數執行之后會返回一個對象字面量表達式,即返回一個新的object對象。
{ // 這是一個對象,這是對象字面量表達式創建對象的寫法,例如{a:11,b:22}
fun: function(m) {
return fun(m, n);
}
}
③ 返回的對象里面含有fun這個屬性,并且這個屬性里面存放的是一個新創建匿名函數表達式function(m) {}。
④ 在③里面創建的匿名函數會返回一個叫 fun 的具名函數return fun(m, n);,這里需要說明一下這個 fun 函數返回之后的執行過程:
返回 fun 函數,但默認不執行,因為在 js 里面,函數是可以保存在變量里面的。
如果想要執行 fun 函數,那么首先會在當前作用域尋找叫fun 名字的具名函數,但是因為當前作用域里 fun 名字的函數是沒有被定義的,所以會自動往上一級查找。
2.1 注解:當前的作用域里是一個新創建的對象,并且對象里面只有 fun 屬性,而沒有 fun 具名函數
2.2 注解:js 作用域鏈的問題,會導致他會不斷地往上級鏈查找。
在當前作用域沒找到,所以一直往上層找,直到找到了頂層的 fun函數,然后執行這個頂層的 fun 函數。
然后這兩個 fun 函數會形成閉包,第二個 fun 函數會不斷引用第一個 fun 函數,從而導致一些局部變量例如 n,o 得以保存。
所謂閉包:各種解釋都有,但都不是很接地氣,簡單的來說就是在 js 里面,有一些變量(內存)可以被不斷的引用,導致了變量(內存)沒有被釋放和回收,從而形成了一個獨立的存在,這里涉及了js 的作用域鏈和 js 回收機制,結合兩者來理解就可以了。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/97098.html
摘要:然后最外層這個函數會返回一個新對象,對象里面有一個屬性,名為,而這個屬性的值是一個匿名函數,它會返回。 最近看到一條有意思的閉包面試題,但是看到原文的解析,我自己覺得有點迷糊,所以自己重新做一下這條題目。 閉包面試題原題 function fun(n, o) { // ① console.log(o); return { // ② fun: function(m) ...
摘要:春招前端實習面試記錄從就開始漸漸的進行復習,月末開始面試,到現在四月中旬基本宣告結束。上海愛樂奇一面盒模型除之外的面向對象語言繼承因為是視頻面試,只記得這么多,只感覺考察的面很廣,前端后端移動端都問了,某方面也有深度。 春招前端實習面試記錄(2019.3 ~ 2019.5) 從2019.1就開始漸漸的進行復習,2月末開始面試,到現在四月中旬基本宣告結束。在3月和4月經歷了無數次失敗,沮...
摘要:我們必須對數字數組進行升序排序,并找出給定數字在該數組中的位置。算法說明將值第二個參數插入到數組第一個參數中,并返回其在排序后的數組中的最低索引。我們的目標是將輸入的數字在輸入數組后中排序后,再返回它的索引。 翻譯:瘋狂的技術宅原文:https://medium.freecodecamp.o... 本文首發微信公眾號:前端先鋒歡迎關注,每天都給你推送新鮮的前端技術文章 編寫算法時...
摘要:這篇文章總結下之前看的文章和自己在工作中遇到的坑,純手寫的,有什么寫的不對的請多多提出修正哈變量提升何為變量提升里面的變量在聲明之前就可以使用,因為該聲明已經被提升至該作用域函數或全局的頂部直接上代碼和都會變量提升優先級上面可理解為函數這時 這篇文章總結下之前看的文章和自己在工作中遇到的坑,純手寫的,有什么寫的不對的請多多提出修正哈 變量提升 何為變量提升?js里面的變量在聲明之前就可...
摘要:問題的關鍵在于其執行過程中的微任務數量,下文中我們需要用上述代碼中的方式對微任務的執行順序進行標記,以輔助我們理解這其中的執行過程。 原文發布在掘金社區:https://juejin.im/post/5c3cc981f265da616a47e028 起源 2019年了,相信大家對 Promise 和 async/await 都不再陌生了。 前幾日,我在社區讀到了一篇關于 async/...
閱讀 590·2023-04-26 01:42
閱讀 3227·2021-11-22 11:56
閱讀 2404·2021-10-08 10:04
閱讀 848·2021-09-24 10:37
閱讀 3131·2019-08-30 15:52
閱讀 1752·2019-08-29 13:44
閱讀 477·2019-08-28 17:51
閱讀 2149·2019-08-26 18:26