返回信息流myFunction = function(){
var myPrivate;
var myPrivateFun1 = function(){
};
var myPrivateFun2 = function(){
myPrivateFun1();
return {
a: function(){}
}
};
return myPrivateFun2;
}();
问题:
1、myFunction函数里有几个闭包?
2、整个程序的执行过程是怎么样的?
3、谁调用的myPrivateFun2?
这是一条镜像帖。来源:北邮人论坛 / www-technology / #18219同步于 2012/11/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖
这个算是JavaScript的闭包吗? 看不太懂,请教大家
gadou
2012/11/24镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
myFunction为什么一定要写成即时调用的形式?
fun = function(){
}();
在html中,先引入了上述js文件
在下面进行了如下使用:
<script>var xx=myFunction();</script>
myFunction在上面不是已经销毁了吗? 怎么还可以使用?
这是什么用法呢?
【 在 gadou (嘎豆) 的大作中提到: 】
: myFunction = function(){
: var myPrivate;
: var myPrivateFun1 = function(){
: ...................
首先 ====================
function(){
var myPrivate;
var myPrivateFun1 = function(){
};
var myPrivateFun2 = function(){
myPrivateFun1();
return {
a: function(){}
}
};
return myPrivateFun2;
}
========= 这里**定义了一个函数**,但是没有动,没有执行。
()
========= 它开始动了!它干了什么呢?
var myPrivate
var myPrivateFun1
var myPrivateFun2
========= 定义了三个变量,其中有两个是函数,但是,注意,是定义。依旧没有动,然后它
return myPrivateFun2
========= 返回了!于是myFunction这个变量得到了一个值:myPrivateFun2
于是
1、管他呢,我只看得到作用域
2、见上文
3、没有人调用myPrivateFun2,或许xx会吧
4、这么写是为了产生一个匿名的命名空间
5、myFunction什么时候销毁了?`myFunction = function(){}()`明明在赋值好不好,myFunction获得了`function(){}`这个匿名函数的返回值
4、这么写是为了产生一个匿名的命名空间
这点不太理解
意思是其中命名的变量及函数不会被其它所有地方的变量干扰吗?
【 在 binux (足兆叉虫|中立生物|) 的大作中提到: 】
: 首先 ====================
: function(){
: var myPrivate;
: ...................
试了一下
如果不这么写
myFunction = function(){
}();
后面没办法用myFunction了
【 在 binux (足兆叉虫|中立生物|) 的大作中提到: 】
: 首先 ====================
: function(){
: var myPrivate;
: ...................
4、这么写是为了产生一个匿名的命名空间
这点不太理解
意思是其中命名的变量及函数不会被其它所有地方的变量干扰吗?
是
myFunction = function(){
return 1;
}();
【 在 gadou 的大作中提到: 】
: 试了一下
: 如果不这么写
: myFunction = function(){
: ...................
myFunction = function(){
return 1;
}();
如果没有最后的()
这个就相当于一个函数定义
但是后面这样写为什么不能执行了呢
var xx=myFunction();
【 在 binux (足兆叉虫|中立生物|) 的大作中提到: 】
: 4、这么写是为了产生一个匿名的命名空间
: 这点不太理解
: 意思是其中命名的变量及函数不会被其它所有地方的变量干扰吗?
: ...................
你看了上面的解释吗?
myFunction得到了匿名函数function(){return 1;}的返回值,看好返回值是什么
【 在 gadou 的大作中提到: 】
: myFunction = function(){
: return 1;
: }();
: ...................