本帖最后由 DNB_duzhe 于 2012-12-27 17:20:31 编辑

解决方案 »

  1.   


    function funA(x){
        return function(y){
            return x*y;
        }
    }
    //alert(funA(100)(100));//==>等价于
    var tmp = funA(100);//tmp = function(y){return 100*y}
    alert(tmp(100));
     
    var uniqueID = (function fun(){
        var id = 0;
        return function(){
            return id++;
        }
    })();//执行结果,uniqueID为一个函数,函数体为:function(){return id++}。函数的执行环境中有个私有变量id,只有本函数能访问,每执行一次该函数,id都+1。
    alert(uniqueID);
     
    alert(uniqueID());
    alert(uniqueID());
    alert(uniqueID());
    alert(uniqueID());
      

  2.   

    所谓闭包,如果从广义上理解是相当复杂的。但是从狭义上理解还是相对比较简单。就是外部不能直接调用内部的函数或者变量。先从javascript说起吧。
    javascript的是闭包的,调用时外部函数不能调用函数内部的变量的。假如想要调用可以让一个函数返回来调用。
    function Fruit(){
    var b = 'b';
    var a = 'a';

    }比如上述代码,Fruit函数内部的变量 b与a ,不能 用 Fruit.a 或者Fruit.b 来调用,同样也不可以用
    (new Fruit()).a 或者(new Fruit()).b来调用,这是因为闭包。
    如果把想要调用则必须要返回。
    function Fruit(){
    var b = 'b';
    var a = 'a';
    return {_a:a,_b:b}
    }
    这样就可以 Fruit()._a 与 Fruit()._b调用到内部变量。
    javascript 返回的类型中 有一种类型为 function  可以用typeof 来判断
    比如一个 对象 func
    alert(typeof func)
    对于function 类型的对象,都可以在他后面加上()来调用。
    比如:
    var obj = (function(){return function(){alert('b')}});
    比如上述代码的 obj 实际上是function的一个对象,调用 typeof 判断为 function
    所以obj是可以调用的。
    即 执行 obj(); 可以打印出 b。
    理解了javascript中function对象是可以调用的,这一层意思以后
    那么就不难理解,下面这句话的意思了。实际是一个匿名函数直接被调用了。
    (function(){alert('func')})();
    现在你应该很清楚上面代码的意思了吧。
      

  3.   

    更正一个错误 var obj = (function(){return function(){alert('b')}});
     var obj = (function(){return function(){alert('b')}})();