閉包理解
阿新 • • 發佈:2021-06-28
有段時間沒有寫過閉包了,趁現在有空也重溫下閉包吧~
閉包概念:
閉包是在另一個函式(稱為父函式)中定義的函式,並且可以訪問在父函式作用域中宣告和定義的變數。 同一閉包的不同例項中引用的自由變數互相沒有影響的。 說實話,閉包的使用不是很常用,可能在js使用得比較多,比如在回撥、setTimeout或者給多個dom新增點選事件等場景吧。 不廢話,直接寫個閉包: js:function a(){function b(){console.log(2)} return b} cc = a() cc()
純粹在瀏覽器手擼的哈~ 從上面例子可看出:閉包有外部函式a,以及內部函式b,return的是b函式,打印出的結果是: 2 一個函式裡包含一個函式,並返回該函式,這就是一個簡單的閉包
def out_func(): list1 = [] def inner_func(n): list1.append(1) print(n, list1) return inner_func cc = out_func() cc('ff') cc('ff') cc('ff') cc2 = out_func() cc2('ffg') cc2('ffg')
輸出的結果如上圖~
比較好理解是,子函式可以訪問父函式的變數,反之不行, 並且每個例項物件互不干擾。 在舉個例子:def out(): # a = 'xxxxx' print(a) def inner(): print(a) return inner cc = out() cc()
上面的例子就是我不想在使用out()例項時列印a,想在呼叫時列印a,可從註釋的地方能聯想到我想說啥吧~ 需要在例項化時不呼叫想實現的邏輯而在需要用時呼叫可以用到閉包 以上標了顏色的應該就是我概括閉包的意思哈~ 我是這麼短淺的理解的~~