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