|
>>> function a(){function b(){return "aaa"} Function.prototype.c=function(){return b();}}
>>> a()
>>> a.c
function()
>>> a.c()
"aaa"
>>> a.hasOwnProperty("c")
false
看這段代碼,首先聲明一個(gè)函數(shù)a,內(nèi)部又定義了一個(gè)函數(shù)b,但是函數(shù)b不是函數(shù)對(duì)象a的方法,只是函數(shù)a塊當(dāng)中的臨時(shí)變量函數(shù)(或者說(shuō)私有函數(shù),不知道怎么描述好),后面又定義了一個(gè)函數(shù)c是用function(){}在a內(nèi)部定義的,所以會(huì)產(chǎn)生closure所以c可以遍歷到a下面所有塊內(nèi)部變量,當(dāng)然包括b,我又把c掛到了Function.prototype下面,就是不是直接掛a下,而是掛到a的原形鏈上,最后還是執(zhí)行出來(lái)了,并且hasOwnProperty也是假,更有
代碼
復(fù)制代碼 代碼如下:
>>> d={};
Object
>>> function a(){function b(){return "aaa"} d.c=function(){return b();}}
>>> a()
>>> d.c()
"aaa"
closure和函數(shù)執(zhí)行的context一點(diǎn)關(guān)系沒(méi)有,context可以用call apply方法改變this,可是closure在function定義后好似沒(méi)有辦法再修改了,不知道是不是這樣
JavaScript技術(shù):奇妙的js,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。