JavaScript闭包

guodong66 2009-11-04 09:25:11
一个程序如下:

function User(properties){
//遍历该对象的所有属性,并保证其作用域正确
for(var i in properties){
//从这里开始闭包部分
(function(which)){
var p = i;
//创建此属性的一个新的读取器(getter)
which["get"+p] = function(){
return properties[p];
};
//创建此属性的一个新的设置器(setter)
which["set"+p] = function(val){
properties[p] = val;
};
})(this);[/color]
//到这里结束
}
}
这里的闭包部分谁能给解释一下,还有红色字体部分的which是做什么的? 还有闭包部分的红色this是做什么的?给详细解释下闭包吧,呵呵 ,谢谢了、

...全文
95 点赞 收藏 13
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
道光2008 2009-11-04
[Quote=引用 3 楼 sohighthesky 的回复:]
JScript code
相当于var fun=function(which)){var p= i;//创建此属性的一个新的读取器(getter)which["get"+p]=function(){return properties[p];
};//创建此属性的一个新的设置器(setter)which["set"+p]=function(val){
properties[p]= val;
}?-
[/Quote]
支持
回复
guodong66 2009-11-04
[Quote=引用 11 楼 yingkeda 的回复:]
学习专有名词:什么是闭包和开宝啊!
[/Quote]

楼上有明确解释,呵呵。
回复
岁月之梦 2009-11-04
学习专有名词:什么是闭包和开宝啊!
回复
guodong66 2009-11-04
没人能解释下么? 自己顶下。
回复
lzh_me 2009-11-04
又学到了一些...
帮顶...
回复
guodong66 2009-11-04
自己顶下,另附:此问题是自执行,和闭包弄混了,呵呵。
回复
guodong66 2009-11-04
[Quote=引用 5 楼 happy664618843 的回复:]
JScript codefunction a(){var i=0;function b(){
alert(++i);
}return b;
}var c= a();
c();1、函数b嵌套在函数a内部;2、函数a返回函数b。

  这样在执行完var c=a()后,变量c实际上是指向了函数b,再执行c()后就会弹出一个窗口显示i的值(第一次为1)。这段代码其实就创建了一个闭包,函数a外的变量c引用了函数a内的函数b,就是说:

  当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个闭包。
[/Quote]

谢谢楼上的解释,貌似我有点弄混了,我给出的代码是自执行代码吧,能帮忙解释下么?
回复
happy664618843 2009-11-04
  function a(){
var i=0;
function b(){
alert(++i);
}
return b;
}
var c = a();
c();

  这段代码有两个特点:

  1、函数b嵌套在函数a内部;

  2、函数a返回函数b。

  这样在执行完var c=a()后,变量c实际上是指向了函数b,再执行c()后就会弹出一个窗口显示i的值(第一次为1)。这段代码其实就创建了一个闭包,为什么?因为函数a外的变量c引用了函数a内的函数b,就是说:

  当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个闭包。
回复
happy664618843 2009-11-04
  function a(){
var i=0;
function b(){
alert(++i);
}
return b;
}
var c = a();
c();



  1、函数b嵌套在函数a内部;

  2、函数a返回函数b。

  这样在执行完var c=a()后,变量c实际上是指向了函数b,再执行c()后就会弹出一个窗口显示i的值(第一次为1)。这段代码其实就创建了一个闭包,函数a外的变量c引用了函数a内的函数b,就是说:

  当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个闭包。
回复
guodong66 2009-11-04
[Quote=引用 3 楼 sohighthesky 的回复:]
JScript code
相当于var fun=function(which)){var p= i;//创建此属性的一个新的读取器(getter)which["get"+p]=function(){return properties[p];
};//创建此属性的一个新的设置器(setter)which["set"+p]=function(val){
properties[p]= val;
};
};
fun(this);
[/Quote]

传递的which有特殊意义么? 和下边的which结合的? 还是说只是一个随便命名的参数名字?或者是楼上说的虚参? 这个是做什么的 呵呵,javaScript是在不怎么好。

还有fun(this);这里执行时是循环还是只是在执行一次?
回复
sohighthesky 2009-11-04

相当于

var fun=function(which)){
var p = i;
//创建此属性的一个新的读取器(getter)
which["get"+p] = function(){
return properties[p];
};
//创建此属性的一个新的设置器(setter)
which["set"+p] = function(val){
properties[p] = val;
};
};
fun(this);
回复
guodong66 2009-11-04
[Quote=引用 1 楼 fandelei1982 的回复:]
this是实参,which是虚参
[/Quote]

能否详细解释下么? which这个虚参是什么意思? 做什么的?
这个this指的是谁?
回复
friendly_ 2009-11-04
this是实参,which是虚参
回复
发动态
发帖子
Java EE
创建于2007-09-28

6.6w+

社区成员

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
申请成为版主
社区公告
暂无公告