什么是匿名函数. 什么是闭包?
 (function(){ 
/*相关代码*/ 
})();  这只是个匿名函数. 
闭包的定义是
当一个嵌套的函数被输出到它被定义的作用域之外.只有嵌套函数被如此使用时,才被明确的称为闭包.只是有人会用匿名函数返回一个函数. 这样形成的闭包函数有 只有这个函数自己才能访问的属性
比如说  
uniqueID  =  ( function ()   {   //  这个函数的调用对象保存值 
      var  id  =   0 ;            //  这是私有恒久的那个值 
      //  外层函数返回一个有权访问恒久值的嵌套的函数 
      //  那就是我们保存在变量uniqueID里的嵌套函数. 
       return   function ()   {  return  id ++ ; } ;   //  返回,自加. 
 } )();  //  在定义后调用外层函数.这样的话.就只有调用这个函数才能访问这个ID.   
用匿名函数创建闭包.可以很好的保护属性
我看到很多人在回答别人的问题时.认为匿名函数就是闭包. 这点是如何得出的呢?

解决方案 »

  1.   

    http://www.cnblogs.com/rainman/archive/2009/05/04/1448899.html
    匿名函数函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途。匿名函数:就是没有函数名的函数。1、函数的定义,首先简单介绍一下函数的定义,大致可分为三种方式第一种:这也是最常规的一种function double( x ){
        return 2 * x;   
    }
    第二种:这种方法使用了Function构造函数,把参数列表和函数体都作为字符串,很不方便,不建议使用。
    var double = new Function( 'x'  , ' return 2 * x;');
    第三种:......
      

  2.   

    比如这个帖子
    http://topic.csdn.net/u/20090513/09/7d5be4f8-8201-48d6-8626-a775b4412565.html这个
    http://topic.csdn.net/u/20090506/14/8951954a-65df-4058-a654-69e18b33b414.html
      

  3.   

    说简单一点,匿名函数就是没有名字的函数,
    所有的函数都可以成为闭包, 但要看在什么时候用。
    其实本来可以没有匿名函数,因为既然函数主体都出来了,给它个名字又何妨;但是使用匿名函数可以形成比较独立的作用域,而且外部没发直接访问它; 可以简化编程,提高编程效率和可读性;
    我见过最爽的匿名函数就是像这样写阶乘:var a = (function(n){
    if(n<1){
    alert("invalid arguments");
    return 0;
    }
    if(n==1){
    return 1;
    }
    else{
    return n * arguments.callee(n-1); 
    }
    })(4);
    alert(a);闭包之所以这么“火” 就是因为它看起来似乎突破了函数本因该有的作用域;
    但是只要理解了javascript是静态作用域(就是作用域在函数定义的时候就确定了),就不难理解其实闭包并没有突破自己的作用域;恰恰说明了js是静态作用域;只是表现的让我们读起来有点不自然而已。
      

  4.   

    一篇关于作用域,闭包,js寻址的文章推荐给楼主,也是我转载的:
    http://blog.csdn.net/sunxing007/archive/2009/04/27/4129178.aspx
      

  5.   

    var a=function(){};//此时就是把匿名函数赋值给a 这个变量了。var b=function(){
       alert();
    }();//此时就是必包。相当于实例化B函数 or  b();匿名函数是匿名函数,怎么可能匿名函数就是必包呢?2者之间是有区别的
      

  6.   

    在我理解的层次.凡是没有命名的函数都是匿名函数.如:
    function(){}
    他是一个匿名函数.也就是函数定义的实体.闭包则是函数运行时的实体.如:
    (function(){alert(i)})(i)
    赋不赋给变量都没所谓.
    差别就在于.如果i存在.
    闭包中的匿名函数可以调用到i.也可以像sunxing007的理解.
    因为i看来只是闭包函数的参数.
    作用域只在上面的function(){alert(i)}外.
    但实际上function还是能拿到i.
    因为匿名函数的定义体还在闭包函数的作用域里.另外(function)()可以看作,var a=function,a()
      

  7.   

    我不确定LS的说法时候正确
     是否有高人来说明一下
    闭包则是函数运行时的实体.如: 
    (function(){alert(i)})(i)  关于LS的这个说法是否正确呢.
     这个是闭包么?