1. 程式人生 > 其它 >vue.config.js常用配置詳解

vue.config.js常用配置詳解

閉包——裝飾器的本質也是閉包

“閉包”的本質就是函式的巢狀定義,即在函式內部再定義函式,如下所示。

“閉包”有兩種不同的方式,第一種是在函式內部就“直接呼叫了”;第二種是“返回一個函式名稱”。

(1)第一種形式——直接呼叫

def Maker(name):
    num=100
    def func1(weight,height,age):
        weight+=1
        height+=1
        age+=1
        print(name,weight,height,age)
    func1(100,200,300) #在內部就直接呼叫“內部函式”
Maker('feifei') #呼叫外部函式,輸出 feifei 101 201 301

(2)第二種形式——返回函式名稱

def Maker(name):
    num=100
    def func1(weight,height,age):
        weight+=1
        height+=1
        age+=1
        print(name,weight,height,age)
    return func1 #此處不直接呼叫,而是返回函式名稱(Python中一切皆物件)
maker=Maker('feifei') #呼叫包裝器
maker(100,200,300) #呼叫內部函式

(3)“閉包”的作用——儲存函式的狀態資訊,使函式的區域性變數資訊依然可以儲存下來,如下。

def Maker(step): #包裝器
    num=1
    def fun1(): #內部函式
        nonlocal num #nonlocal關鍵字的作用和前面的local是一樣的,如果不使用該關鍵字,則不能再內部函式改變“外部變數”的值
        num=num+step #改變外部變數的值(如果只是訪問外部變數,則不需要適用nonlocal)
        print(num)
    return fun1
#=====================================#
j=1
func2=Maker(3) #呼叫外部包裝器
while(j<5):
    func2() #呼叫內部函式4次 輸出的結果是 4、7、10、13
    j+=1

從上面的例子可以看出,外部裝飾器函式的區域性變數num=1、以及呼叫裝飾器Maker(3)時候傳入的引數step=3都被記憶了下來,所以才有1+3=4、4+3=7、7+3=10、10+3=13.

從這裡可以看出,Maker函式雖然呼叫了,但是它的區域性變數資訊卻被儲存了下來,這就是“閉包”的最大的作用——儲存區域性資訊不被銷燬。

nonlocal關鍵字的作用

該關鍵字的作用和local的作用類似,就是讓“內部函式”可以修改“外部函式(裝飾器)”的區域性變數值。詳細資訊這裡不做討論。