首先,我覺得,乙個概念,如果不理解也不影響使用的話,那麼,就沒必要去理解 它、去學習它。閉包就是這樣乙個概念,你不理解它也能很好的用它。俺這兩年寫as3程式,是天天在和它打交道,甚至有過乙個function套乙個,乙個 方法中套了20多個function的極端例子,但從未深究過它是怎麼實現的,它就像水和空氣一樣,我們不需要知道水是h2o,空氣是氧氣氮氣二氧化碳等 的混合物,也活的好好的。
其次,我覺得,網上對閉包概念的解釋都太狹隘了,看得人蛋疼,就像回到了i++,++i時代一樣。如果非要去理解這個概念,像那樣去理解,則收穫太小,不值得。
先看看數學上的閉包。
(1,5) 是乙個區間,但對這個區間做分析、計算什麼的,經常會用到1和5這兩個不屬於這個區間的值,[1,5]就是(1,5)的閉包。
在生活上,我們辦事情,找a部門,a部門說,你先得找b部門蓋個章,b部門說,你先得找c部門蓋個章,c部門說,這個東西不是我們的職權範圍…… 踢皮球,這就是非閉包。閉包就是負責到底,你找到a部門,a部門接待的那個人負責到底,他/她去協調b部門和c部門。
在工程上,閉包就是專案經理,負責排程專案所需要的資源。老闆、客戶有什麼事情,直接找專案經理即可,不用再去找其它的人。
在程式語言中,閉包就是一種語法糖,它以很自然的形式,把我們的目的和我們的目的所涉及的資源全給自動打包在一起,以某種自然、盡量不讓人誤解的方式讓人來使用。至於其具體實現,我個人意見,在不影響使用的情況下,不求甚解即可。在很多情況下,需要在一段**裡去訪問外部的區域性變數,不提供這種語法糖,需要寫非常多的**,有了閉包這個語法糖,就不用寫這麼多**,自然而然的就用了。
這樣一來,可以把閉包從乙個語法機制提公升為一種設計原則:
閉包是從使用者角度考慮的一種設計概念,它基於對上下文的分析,把齷齪的事情、複雜的事情和外部環境互動的事情都自己做了,留給使用者乙個很自然的介面。在這個原則下,函式式語言中,那種所謂的閉包只是一種「閉包」,還有大量的其它型別的「閉包」等待發現和實現。
結果:(1)閉包是一種設計原則,它通過分析上下文,來簡化使用者的呼叫,讓使用者在不知曉的情況下,達到他的目的;
(2)網上主流的對閉包剖析的文章實際上是和閉包原則反向而馳的,如果需要知道閉包細節才能用好的話,這個閉包是設計失敗的;
(3)盡量少學習。
**:
什麼是閉包
什麼是閉包 閉包說的通俗一點就是打通了一條在函式內部訪問函式內部作用域的通道。正常情況下,函式外部是訪問不了內部作用域變數的,表象判斷是不是閉包 函式巢狀函式,內部函式被return 內部函式呼叫外層函式的區域性變數。優點 可以隔離作用域,不造成全域性渲染。缺點 由於閉包長期駐留記憶體,則長期這樣會...
什麼是閉包
理解閉包需要先了解 作用域 作用域是指當前執行 對變數的訪問許可權 分為靜態作用域和動態作用域,js採用靜態作用域 其區別是 靜態作用域 函式作用域是在函式定義時決定,動態作用域 函式作用域是在函式呼叫時定義 es6的塊級作用域 通過let 和 const 宣告,只能在宣告變數所在的作用域裡使用,外...
什麼是閉包?為什麼使用閉包?閉包的缺點?
閉包 即重用乙個變數,又保護變數不被汙染的一種機制。為什麼使用閉包 全域性變數和區域性變數都具有不可兼得的優缺點。全域性變數 優 可重用,缺 易被汙染。區域性變數 優 僅函式內可用,不會被汙染。缺 不可重用 何時使用 只要即重用乙個變數,又保護變數不被汙染時。如何 3步 1.用外層函式包裹要保護的變...