#### 先理解 js 中的執行環境(https://www.jianshu.com/p/5e5...
閉包 按中文的意思就是關上一個包的意思。如果我們把函數的變量對象當做是一個包的話,那這個詞很形象體現了它的作用 。函數被調用時會創建它的執行環境,函數語句執行完后程序會自動銷毀這個函數的執行環境,但是當一個函數中聲明了另一個函數(子函數),并且如果存在對這個子函數引用,就會形成閉包,形象點說就相當于把父函數的活動對象(其實就是變量對象,只是它是執行時的變量對象)給關閉了起來,不讓程序去銷毀它(用技術語言就是父函數的活動對象會儲存在內存中,知道手動的解除這個引用)。例如:
function a() { var name = "xuxu"; function b() { console.log(name); } // 此處產生閉包 b(); } a();
當函數可以記住并訪問它所在的作用域鏈時,就產生了閉包 當然,大部分的閉包都不是這么直觀的,因為子函數的調用是可以在父函數之外的,例如:
function a() { var name = "xuxu"; function b() { console.log(name); } return b; } var c=a(); // 此處產生閉包 此處的c函數其實就是a函數 c();
通過以上代碼,我們也可以看出一個閉包的好處,就是我們再全局作用域(此處是widow)下訪問到了局部作用域(a函數)的作用域的值,按正常的詞法作用域是無法這么做的,但是當我們使用閉包是就可以了。然后我們再看一點我們平時寫的比較多的:
function foo() { var a = 2; function baz() { // 2 console.log( a ); } bar( baz ); } function bar(fn) { // 大家快看呀,這就是閉包! fn(); }
又或者
var fn; function foo() { var a = 2; function baz() { console.log( a ); } // 將baz分配給全局變量 fn = baz; } function bar() { // 大家快看呀,這就是閉包! fn(); } foo(); // 2 bar();
以上也是閉包,因此在函數內部調用子函數,或者通過何種手段將內部函數傳遞到所在的詞法作用域以外,它都會持有對原始定義作用域的引用,無論在何處執行這個函數都會使用閉包 大家理解了木有哇~
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/107259.html
摘要:大名鼎鼎的閉包面試必問。閉包的作用是什么。看到閉包在哪了嗎閉包到底是什么五年前,我也被這個問題困擾,于是去搜了并總結下來。關于閉包的謠言閉包會造成內存泄露錯。閉包里面的變量明明就是我們需要的變量,憑什么說是內存泄露這個謠言是如何來的因為。 本文為饑人谷講師方方原創文章,首發于 前端學習指南。 大名鼎鼎的閉包!面試必問。請用自己的話簡述 什么是「閉包」。 「閉包」的作用是什么。 首先...
摘要:當初看這個解釋有點懵逼,理解成閉包就是函數中的函數了。里的閉包最近不滿足于只干前端的活,開始用起了。里的閉包最近在學習語言,讓我們來看一下語言里的閉包。在中,閉包特指將函數作為值返回的情況,被返回的函數引用了生成它的母函數中的變量。 本人開始接觸編程是從js開始的,當時網上很多人說閉包是難點,各種地方對閉包的解釋也是千奇百怪。如今開始接觸js以外的各種編程語言,發現不光是js,php、...
摘要:當初看這個解釋有點懵逼,理解成閉包就是函數中的函數了。里的閉包最近不滿足于只干前端的活,開始用起了。里的閉包最近在學習語言,讓我們來看一下語言里的閉包。在中,閉包特指將函數作為值返回的情況,被返回的函數引用了生成它的母函數中的變量。 本人開始接觸編程是從js開始的,當時網上很多人說閉包是難點,各種地方對閉包的解釋也是千奇百怪。如今開始接觸js以外的各種編程語言,發現不光是js,php、...
摘要:內部的稱為內部函數或閉包函數。過度使用閉包會導致性能下降。,閉包函數分為定義時,和運行時。循環會先運行完畢,此時,閉包函數并沒有運行。閉包只能取得外部函數中的最后一個值。事件綁定種的匿名函數也是閉包函數。而對象中的閉包函數,指向。 閉包概念解釋: 閉包(也叫詞法閉包或者函數閉包)。 在一個函數parent內聲明另一個函數child,形成了嵌套。函數child使用了函數parent的參數...
摘要:閉包引起的內存泄漏總結從理論的角度將由于作用域鏈的特性中所有函數都是閉包但是從應用的角度來說只有當函數以返回值返回或者當函數以參數形式使用或者當函數中自由變量在函數外被引用時才能成為明確意義上的閉包。 文章同步到github js的閉包概念幾乎是任何面試官都會問的問題,最近把閉包這塊的概念梳理了一下,記錄成以下文章。 什么是閉包 我先列出一些官方及經典書籍等書中給出的概念,這些概念雖然...
摘要:一般來講,函數執行完畢后,局部活動對象就會被銷毀,內存中僅保存全局作用域,但是閉包的情況有所不同理解閉包的前提先理解另外兩個內容作用域鏈垃圾回收作用域鏈當代碼在執行過程中,會創建變量對象的一個作用域鏈。 閉包是javascript語言的一個難點,也是它的特色,很多高級應用都要依靠閉包來實現。個人的理解是:函數中嵌套函數。 閉包的定義及其優缺點 閉包是指有權訪問另一個函數作用域中的變量的...
閱讀 1597·2023-04-25 14:12
閱讀 1070·2021-08-27 16:24
閱讀 2533·2019-08-30 15:44
閱讀 2913·2019-08-30 13:16
閱讀 1665·2019-08-29 14:10
閱讀 966·2019-08-29 13:54
閱讀 1296·2019-08-29 13:09
閱讀 1803·2019-08-26 18:37