JavaScript的閉包詳解

2021-08-19 19:24:31 字數 526 閱讀 2117

首先我們來看看一道題

首先可以看到上述題目有兩個函式,乙個函式包裹著乙個函式

當new person()的時候  person()函式開始被定義  產生乙個go{} 代表全域性

乙個ao代表本身

當執行this.say=sss的時候,sss()函式會被定義但不會被執行,被定義的時候就儲存了person()的所有勞動成果,operson.say()就變成了sss()  那麼ao和go就被sss函式所儲存下來了

ao{}

ao  sss函式自增會+1 a=1;

go{}

那麼此時在執行sss函式的時候,a++的a在sss函式找不到,那麼sss就會去person函式找a的變數,因為a的變數為0所以通過sss函式的自增就變成了a=1被儲存了下來,此時sss的ao{}執行完就銷毀了,當再次執行sss函式的時候,那麼它所儲存的person函式的ao中的a還是為1,所以第二次a=2。

最終結果是121

javascript閉包詳解

下面先看乙個例子,在不執行的情況下推測一下返回結果.function t1 return t2 var temp t1 var age 99 temp 在學習了作用域之後也許會分析結果是99,實際上是20.下面對其一一分析 在大部分語言中,t1被呼叫執行,則申請記憶體並把其區域性變數push入棧。t...

javascript閉包使用

之前看到一段 很是不能理解,然後就查詢資料並且找網路上得大牛請教,最後弄懂了這段 然後就拿出來總結一下。先來看一段 var arrtest for var i 0 i 3 i arrtest function function function console.log arrtest 0 tostr...

javaScript閉包理解

以下是樓主的見解,如有錯誤請幫忙矯正。以下是是乙個簡單的閉包例子 function creatfunc var myfunc creatfunc alert myfunc 變數variable是乙個閉包,閉包的生命週期一般為呼叫閉包的物件為空 null 時結束。舉乙個複雜點的例子 var singl...