奇妙的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一點(diǎn)關(guān)系沒有,context可以用call apply方法改變this,可是closure在function定義后好似沒有辦法再修改了,不知道是不是這樣
相關(guān)文章
JS highcharts實(shí)現(xiàn)動態(tài)曲線代碼示例
這篇文章主要介紹了JS highcharts實(shí)現(xiàn)動態(tài)曲線代碼示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-10-10
javascript驗(yàn)證手機(jī)號和實(shí)現(xiàn)星號(*)代替實(shí)例
在我們?nèi)粘i_發(fā)中經(jīng)常要驗(yàn)證客戶輸入的手機(jī)號是否正確,有的時候還需要將中間的四位或者前幾位用星號(*)代替,那該如何實(shí)現(xiàn)呢?下面跟著小編一起來看看。2016-08-08
js 定時器setTimeout無法調(diào)用局部變量的解決辦法
javascript中定時器setTimeout無法調(diào)用局部變量,只需要將setTimeout的第一個參數(shù)改成函數(shù)對象,而不是字符串,就可以了2013-11-11
JavaScript中如何校驗(yàn)接口是否重復(fù)提交
這篇文章主要為大家詳細(xì)介紹了在JavaScript中如何校驗(yàn)接口是否重復(fù)提交,文中的示例代碼講解詳細(xì),有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03
js中的escape及unescape函數(shù)的php實(shí)現(xiàn)代碼
js中的escape及unescape函數(shù)的php實(shí)現(xiàn)代碼...2007-09-09
Bootstrap面板(Panels)的簡單實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了Bootstrap面板(Panels)的簡單實(shí)現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03

