奇妙的js

时间:2021-05-18

复制代码 代码如下:
>>>functiona(){functionb(){return"aaa"}Function.prototype.c=function(){returnb();}}
>>>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
>>>functiona(){functionb(){return"aaa"}d.c=function(){returnb();}}
>>>a()
>>>d.c()
"aaa"


closure和函数执行的context一点关系没有,context可以用callapply方法改变this,可是closure在function定义后好似没有办法再修改了,不知道是不是这样

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章