當我們只呼叫函式時:
function hd()
sum();
} hd();//2
hd();//2
從上面例子我們可以知道,單純的呼叫的話,這個函式是會在記憶體裡直接刪除的。因為沒有變數去指向它,這樣會導致js內部覺得你不需要了。無論是全域性還是區域性,都會被刪除
而當我們用變數去引用它,即有指標指向它的時候,他就不會被清除。但是我們每呼叫一次hd1()函式給乙個新的變數,都會開闢乙個新的記憶體空間,所以裡面的值又是剛開始新的那乙個n = 1。
function hd1()
sum();
} let tem1 = hd1();//此時為執行了hd1函式,返回了sum函式給了tem1
tem1();//2
tem1();//3
tem1();//4
let tem2 = hd1();//此時是新開闢了乙個記憶體空間,n的起始值還是1
tem2();//2
tem2();//3
tem1();//5
還有乙個細節就是賦值時要return sum函式,如果不return,那麼tem1,tem2就不是指向的sum函式,那麼就還是會被銷毀。如果指向了sum函式,那麼其父級的變數那些都會被保留,類似於這樣
理解為子作用域也可以呼叫父作用域的內容
再加深下理解:
function hd1()
show();
}sum();
} let tem1 = hd1();//8
tem1();//8
tem1();//8
tem1();//8
此時我們發現我們建立了乙個show方法,但是跟之前一樣,使用完show方法後自動銷毀了。這是因為此時沒有指向show方法的物件,沒有引用他,沒有保留show方法的記憶體空間而此時我們再像
function hd1()
show();
}sum();
} let tem1 = hd1()();//此時時執行了sum函式,執行了之後返回了show()函式
tem1();//8
tem1();//9
tem1();//10
let tem2 = hd1()();//此時是新開闢了乙個記憶體空間,m的起始值還是7m
tem2();//8
tem2();//9
tem1();//11
此時的環境是這樣的
在show函式裡呼叫hd的n也是毫無問題的。就算++也會保留++,就跟上文說的,子環境被保留了,父環境的變數哪些,也會被保留
而當我們使用建構函式時,其實跟上面的結果也是一樣的,不同的是不用return sum函式了
function hd()
} console.log(new hd());
let tem4 = new hd();
tem4.sum();//4
tem4.sum();//5
EDM郵件營銷使用者生命週期延長措施
不管是挖掘新客戶還是維護老客戶,edm郵件營銷都是非常有效而可靠的客戶溝通方式,使用者對公司或品牌都有生命週期規律可遵循,下面幫助大家學習如何借助edm郵件營銷使用者生命週期延長措施,提公升客戶忠誠度與收益。正確時間裡傳送正確郵件是啟用 維持甚至贏回使用者的關鍵,下面針對不同時期使用者如何開展郵件營...
生命週期函式
另外說一下生命週期函式 virtual void onenter virtual void onentertransitiondidfinish virtual void onexit 這3個是遇到對應情況時呼叫的。在cpp檔案裡如果把它們示例了,你可以在開始時放 結束時關閉 等等。如果他下面的之類...
vue的生命週期,什麼是生命週期
簡而言之 建立前 後,載入前 後,更新前 後,銷毀前 後 beforecreate 建立前 在資料觀測和初始化事件還未開始 created 建立後 完成資料觀測,屬性和方法的運算,初始化事件 beforemount 載入前 在掛載開始之前被呼叫,相關的render函式首次被呼叫。mounted 載入...