javascript中的一个函数求分析

runeveryday 发布于 2011/06/25 09:46
阅读 158
收藏 0
(function(){
    var test = 'Hello world';
})();
上面函数有什么作用,什么时候该这样做?谢谢!上面函数是闭包吗?
加载中
0
宋浩
宋浩

等同于

 

function a(){
   var test = 'hello world';
}
a();

 这个函数不是闭包的

0
runeveryday
runeveryday
依旧迷糊。。
0
JiangMiao
JiangMiao
约束的test的作用域,目前只是匿名函数。
0
runeveryday
runeveryday
function a(){
   var test = 'hello world';
}
test作用域出了上面的函数就消亡了啊。如何约束了呢?
0
runeveryday
runeveryday
上面的例子变成什么样子就是闭包了呢?
0
JiangMiao
JiangMiao
(function() {
  var test = 'Hello world';
  return (function() {
    return test;
  });
})()();
test作用域出了上面的函数就消亡了,所以约束了,也有类似“名字空间”的约束。
有闭包的话,生命周期就延长到了构成闭包的函数的生命周期。
0
RickHuang
RickHuang

按照楼主的例子:

1、作用:定义一个匿名函数,并且立即执行

2、这个函数不是闭包

另外,这样做的作用:

1、一般情况下不会这样做,但是对于一些可能会引起名字冲突的js包来说就会用这种方法来初始化。例如jquery中的$名字,如果你同时也用了prototype,那么$会冲突,所以对于jquery的插件都要求这样初始化:

(function($){

使用$的代码...

})(jQuery)

0
runeveryday
runeveryday

明白点了,谢谢大家。

谁能够举个例子拓展下 什么是闭包吗?以及怎么使用它,它有什么作用。在网上看了点。很迷糊。。

0
RickHuang
RickHuang

闭包可简单理解为:一个处理私有数据的函数对象,例如:

function createClosure(x){

    var c = function(){

            return x--;

    }

    return c

}

var closure1=createClosure(10);

while (closure1()>0){

....

}

函数createClosure接受一个整数参数x,并返回一个闭包函数对象,这个闭包函数每次调用时会对x减去1,并返回。这个x的值只是这个闭包函数对象能够访问。如果你再调用createClosure创建另外一个闭包函数对象,那么这个新的对象只能看到自己的x值,与前一个闭包函数对象的x值无关系。

返回顶部
顶部