閉包 私有屬性

2021-08-21 19:08:19 字數 1846 閱讀 3801

當內部函式被儲存到外部時,將會生成閉包。閉包會導致**作用域鏈不釋放,造成記憶體占用。

// 練習題

function test()

} return arr;//返回到外部

}// 用myarr接收返回的陣列

var myarr = test();//執行test函式 返回arr裝了10個function

// 呼叫十個function

for (var j = 0; j < 10; j++)

// 解析:

test 定義 test.[[scope]]--->0:go

test 執行 test.[[scope]]--->0:testao

1:go

arr[i] 定義 arr[i].[[scope]]--->0:testao

test 執行 test.[[scope]]--->0:testao -test的for迴圈執行完後->

1:go

返回arr 在外部執行 此時的i已經為10

arr[i] 執行 arr[i].[[scope]]--->0:arr[i]ao

1:testao

用立即執行函式解決這個閉包列印相同i的問題

function test()

}(i));

} return arr;//返回到外部

}// 用myarr接收返回的陣列

var myarr = test();//執行test函式 返回arr裝了10個function

// 呼叫十個function

for (var j = 0; j < 10; j++)

// 解析:

test 定義 test.[[scope]]--->0:go

test 執行 test.[[scope]]--->0:testao

1:go

執行時 test.[[scope]]--->0:testao

1:go

執行立即執行函式--->立即執行函式的[[scope]]--->0:立即執行的ao

1:testao

arr[0] 定義 arr[0].[[scope]]--->0:立即執行的ao

1:testao

依次迴圈

arr[1] 定義 arr[1].[[scope]]--->0:立即執行的ao

1:testao

test 執行 test.[[scope]]--->0:testao -test的for迴圈執行完後->

1:go

返回arr 在外部執行 此時的i已經為10 但是每個arr[j]裡面的j是分別儲存的123456789

arr[j] 執行 arr[j].[[scope]]--->0:arr[j]ao

1:立即執行的ao 0-9

2:testao

// 通過閉包,建自己的私有屬性。

function person(name)

this.pay = function()

// ---------------------------

// 當new例項化後。建構函式內部會隱性

// var this =

// 在最後會隱性return this;

// 那麼money會在person的ao中儲存,並且被傳到外部。

// 於是在外部依然能訪問到money。只是無法修改

}// 當例項化物件時 讓他可以通過方法,使money增減。

// 卻無法看到我的money,也無法直接修改money

var person = new person();

繼承(3) 閉包封裝,屬性私有化

高大上的寫法 var inherit function return function target,origin 相當於 var inherit function function demo target,origin return demo return乙個函式相當於return乙個函式的引用。...

閉包與私有變數

看了高程之後知道閉包可以用於建立私有變數,但是對於私有變數仍然不是很懂,後來看了單頁web應用這本書之後,對於私有變數有了更深入的理解,這裡小小總結一下。閉包這裡就不多囉嗦了,相信大家都有一定的了解了,可以理解成a函式裡面套了乙個b函式,而b函式可以訪問到a函式裡面的變數 其實除了私有變數之外相應的...

閉包 解決閉包問題

1 函式和對其周圍狀態 lexical environment,詞法環境 的引用 在一起構成閉包 closure 2 函式與函式所依賴的上下文環境組成閉包問題。3 閉包指的是 能夠訪問另乙個函式作用域的變數的函式。清晰的講 閉包就是乙個函式,這個函式能夠訪問其他函式的作用域中的變數。var arr ...