奇妙的js
>>> 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也是假,更有
代碼
>>> 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)有辦法再修改了,不知道是不是這樣
相關(guān)文章
JavaScript 異步調(diào)用框架 (Part 5 - 鏈?zhǔn)綄?shí)現(xiàn))
在上一篇文章里面,我們?yōu)楫惒秸{(diào)用框架設(shè)計(jì)了一種鏈?zhǔn)秸{(diào)用方式,來(lái)增強(qiáng)異步調(diào)用隊(duì)列的代碼可讀性,現(xiàn)在我們就來(lái)編寫(xiě)實(shí)現(xiàn)這部分功能的代碼。2009-08-08淺談JavaScript窗體Window.ShowModalDialog使用
這篇文章主要介紹了淺談JavaScript窗體Window.ShowModalDialog使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07LayUI—tree樹(shù)形結(jié)構(gòu)的使用解析
這篇文章主要介紹了LayUI—tree樹(shù)形結(jié)構(gòu)的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10js實(shí)現(xiàn)簡(jiǎn)單的省市縣三級(jí)聯(lián)動(dòng)效果實(shí)例
這篇文章主要介紹了js實(shí)現(xiàn)簡(jiǎn)單的省市縣三級(jí)聯(lián)動(dòng)效果,以完整實(shí)例形式分析了JavaScript實(shí)現(xiàn)省市縣三級(jí)聯(lián)動(dòng)效果的具體步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-02-02js實(shí)現(xiàn)感應(yīng)鼠標(biāo)圖片透明度變化的方法
這篇文章主要介紹了js實(shí)現(xiàn)感應(yīng)鼠標(biāo)圖片透明度變化的方法,涉及javascript鼠標(biāo)操作及css修改技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02靜態(tài)的動(dòng)態(tài)續(xù)篇之來(lái)點(diǎn)XML
靜態(tài)的動(dòng)態(tài)續(xù)篇之來(lái)點(diǎn)XML...2006-08-08兩個(gè)listbox實(shí)現(xiàn)選項(xiàng)的添加刪除和搜索
listbox竟然可以實(shí)現(xiàn)選項(xiàng)的添加刪除和搜索不可思議吧,至于采用什么樣的方法實(shí)現(xiàn)的,具體代碼祥看本文嘍,或許可以幫助到你2013-03-03