私有的作用域(只有函式執行會產生私有的作用域)
一般情況下,函式執行會形成乙個新的私有的作用域,當私有作用域中的**自行完成後,我們當前作用域都會主動的進行釋放和銷毀
當前私有作用域中的部分**記憶體被作用於以外的東西占用了,那麼當前的這個作用域就不能銷毀
a、函式執行返回了乙個引用資料型別的值,並且在函式的外面被乙個其他的東西給接收了,這種情況下一班形成 私有作用域都不會銷毀
// 1.返回引用資料型別 2.外面有變數接收function
fn()}//
fn執行形成的這個私有的作用域,就不能再銷毀了
var f = fn()
b、在乙個私有的作用域中給dom元素的事件繫結方法,一般情況下私有作用域也不銷毀
//html
//js
var odiv = document.getelementbyid('div1')
~function
() }()
//當前執行函式形成的這個私有作用域也不銷毀
c、(不立即銷毀)下面情況屬於不立即銷毀,fn返回的函式沒有被其他的東西占用,但是還需要執行一次,所以暫時不銷毀,當返回的值執行完成後,瀏覽器會在空閒的時候把它銷毀了
functionfn()
}f()()
//首先執行fn,返回乙個小函式對應的記憶體位址,然後緊接著讓返回的小函式再執行
//++i 和 i++
都是自身累加1,在和其他的值進行運算時候是有區別
i++: 先拿 i 的值進行運算,運算完成本身再累加 +1
++i:先本身累加 1 ,然後拿累加完成的結果去運算
練習題
functionfn()
}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 = 20var 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 函式來釋放,從而解決不能在析構函式中...