私有的作用域

2022-06-21 14:06:10 字數 2081 閱讀 5396

私有的作用域(只有函式執行會產生私有的作用域)

一般情況下,函式執行會形成乙個新的私有的作用域,當私有作用域中的**自行完成後,我們當前作用域都會主動的進行釋放和銷毀

當前私有作用域中的部分**記憶體被作用於以外的東西占用了,那麼當前的這個作用域就不能銷毀

a、函式執行返回了乙個引用資料型別的值,並且在函式的外面被乙個其他的東西給接收了,這種情況下一班形成 私有作用域都不會銷毀

// 1.返回引用資料型別 2.外面有變數接收

function

fn()}//

fn執行形成的這個私有的作用域,就不能再銷毀了

var f = fn()

b、在乙個私有的作用域中給dom元素的事件繫結方法,一般情況下私有作用域也不銷毀

//

html

//js

var odiv = document.getelementbyid('div1')

~function

() }()

//當前執行函式形成的這個私有作用域也不銷毀

c、(不立即銷毀)下面情況屬於不立即銷毀,fn返回的函式沒有被其他的東西占用,但是還需要執行一次,所以暫時不銷毀,當返回的值執行完成後,瀏覽器會在空閒的時候把它銷毀了

function

fn()

}f()()

//首先執行fn,返回乙個小函式對應的記憶體位址,然後緊接著讓返回的小函式再執行

//

++i 和 i++

都是自身累加1,在和其他的值進行運算時候是有區別

i++: 先拿 i 的值進行運算,運算完成本身再累加 +1

++i:先本身累加 1 ,然後拿累加完成的結果去運算

練習題

function

fn()

}var f =fn()

f(10)//

21 i=11

f(20)//

32 i=12

fn()(10)//

10+11 21

fn()(20)//

20+11 31

var num = 20

var obj =

})(num)

}var fn = obj.fn //

window num = 60 var num = 45私有

fn() //

window下的num=240 上級作用域 var num = 65 console.log(65)

obj.fn() //

obj中的num = 120 num+=20往上級查詢 65+=20 console.log(85)

console.log(window.num, obj.num) //

240 120

//

html

覺得我很帥的點讚 0

//script

var span = document.getelementbyid('span')

var obtn = document.getelementbyid('btn')

obtn.onclick = function

() // 這個方法每次點選都會形成乙個私有的作用域,count重新賦值為0

// 1.全域性變數 count = 0

var count = 0

obtn.onclick = function() // 弊端:在專案中為防止全域性變數之間的衝突,一般是禁止或者減少使用全域性變數

// 2.自己形成乙個不銷毀的私有作用域,來儲存需要累加的數字
~function ()

}()// 3.onclick點選形成乙個自執行函式

obtn.onclick = (function()

})()

// 4.自定義屬性

obtn.count = 0

obtn.onclick = function()

// 5.++運算強制型別轉換

obtn.onclick = function()

私有作用域的初級理解

1.全域性變數 全域性作用域下宣告 預解釋 的變數是全域性變數 2.私有變數 私有作用域下,函式的形參和宣告的變數 3.作用域鏈 在私有作用域下,執行 的時候遇到變數,是私有變數則取私有變數,否則往上一級作用域查詢直到找到 4.函式每次執行的時候,會形成乙個新的私有作用域,然後按照如下步驟進行 a....

析構函式宣告為私有的作用

當我們規定類只能在堆上分配記憶體時,就可以將析構函式宣告為私有的。class alloc public alloc private alloc 如果在棧上分配空間,類在離開作用域時會呼叫析構函式釋放空間,此時無法呼叫私有的析構函式。如果在堆上分配空間,只有在delete時才會呼叫析構函式。可以新增乙...

析構函式宣告為私有的作用

當我們規定類只能在堆上分配記憶體時,就可以將析構函式宣告為私有的。class alloc 如果在棧上分配空間,類在離開作用域時會呼叫析構函式釋放空間,此時無法呼叫私有的析構函式。如果在堆上分配空間,只有在delete時才會呼叫析構函式。可以新增乙個destroy 函式來釋放,從而解決不能在析構函式中...