奇妙的js
更新時間:2007年09月24日 21:37:12 作者:
復(fù)制代碼 代碼如下:
>>> function a(){function b(){return "aaa"} Function.prototype.c=function(){return b();}}
>>> a()
>>> a.c
function()
>>> a.c()
"aaa"
>>> a.hasOwnProperty("c")
false
看這段代碼,首先聲明一個函數(shù)a,內(nèi)部又定義了一個函數(shù)b,但是函數(shù)b不是函數(shù)對象a的方法,只是函數(shù)a塊當(dāng)中的臨時變量函數(shù)(或者說私有函數(shù),不知道怎么描述好),后面又定義了一個函數(shù)c是用function(){}在a內(nèi)部定義的,所以會產(chǎn)生closure所以c可以遍歷到a下面所有塊內(nèi)部變量,當(dāng)然包括b,我又把c掛到了Function.prototype下面,就是不是直接掛a下,而是掛到a的原形鏈上,最后還是執(zhí)行出來了,并且hasOwnProperty也是假,更有
代碼
復(fù)制代碼 代碼如下:
>>> d={};
Object
>>> function a(){function b(){return "aaa"} d.c=function(){return b();}}
>>> a()
>>> d.c()
"aaa"
closure和函數(shù)執(zhí)行的context一點關(guān)系沒有,context可以用call apply方法改變this,可是closure在function定義后好似沒有辦法再修改了,不知道是不是這樣
相關(guān)文章
JavaScript 異步調(diào)用框架 (Part 5 - 鏈?zhǔn)綄崿F(xiàn))
在上一篇文章里面,我們?yōu)楫惒秸{(diào)用框架設(shè)計了一種鏈?zhǔn)秸{(diào)用方式,來增強異步調(diào)用隊列的代碼可讀性,現(xiàn)在我們就來編寫實現(xiàn)這部分功能的代碼。2009-08-08淺談JavaScript窗體Window.ShowModalDialog使用
這篇文章主要介紹了淺談JavaScript窗體Window.ShowModalDialog使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07js實現(xiàn)簡單的省市縣三級聯(lián)動效果實例
這篇文章主要介紹了js實現(xiàn)簡單的省市縣三級聯(lián)動效果,以完整實例形式分析了JavaScript實現(xiàn)省市縣三級聯(lián)動效果的具體步驟與相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2016-02-02js實現(xiàn)感應(yīng)鼠標(biāo)圖片透明度變化的方法
這篇文章主要介紹了js實現(xiàn)感應(yīng)鼠標(biāo)圖片透明度變化的方法,涉及javascript鼠標(biāo)操作及css修改技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-02-02