Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
- >>>
- 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 也是假,更有 代码 closure 和函数执行的 context 一点关系没有,context 可以用 call apply 方法改变 this, 可是 closure 在 function 定义后好似没有办法再修改了,不知道是不是这样
来源: http://www.phperz.com/article/17/0816/338802.html