解决方案 »

  1.   

    那闭包的形成必须有return关键字吗
      

  2.   

    不一定需要。var func = (function(){
        var a = 20;
        function b(){
            alert(a)
        }
        b();
    })();
      

  3.   

    对于这一堆代码,哪里才叫闭包。
    var func = (function(){
        var a = 20;
        function b(){
           var b = a;
        }

        b();
    })();http://baike.baidu.com/view/648413.htm?fr=aladdin
    闭包是可以包含自由(未绑定到特定对象)变量的代码块为什么红色那个叫闭包?
    因为有个变量a.    变量a不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)当b()时候,他所处那个环境中?
    就这段代码来说,他处在window中。 
      

  4.   

    不一定需要。var func = (function(){
        var a = 20;
        function b(){
            alert(a)
        }
        b();
    })();
    那我可以不可以理解为return的作用是相当于给外部一个接口,来操作内部的变量,是对闭包特性的一个应用?只要是这种形式 (function(){
        var a = 20;
        function b(){
            alert(a)
        }
    })()  就会形成一个闭包(函数b有对外部变量a的引用,a是匿名函数的局部变量)?
      

  5.   

    不一定需要。var func = (function(){
        var a = 20;
        function b(){
            alert(a)
        }
        b();
    })();
    那我可以不可以理解为return的作用是相当于给外部一个接口,来操作内部的变量,是对闭包特性的一个应用?只要是这种形式 (function(){
        var a = 20;
        function b(){
            alert(a)
        }
    })()  就会形成一个闭包(函数b有对外部变量a的引用,a是匿名函数的局部变量)?
    一个函数默认都是有个return,只是有时候我们不需要你明确的返回,比如一个函数的执行是为了改变一个对象的style。
    function a(obj){ obj.style.width = '20px;' };
    但其实他有隐形的返回return undefined;
    但有时候我们明确的需要知道返回值,这个值有助于我们的代码继续执行。比如:
    function b(){
       if(isNum(1)){}
    }
    function isNum(n){
        return typeof n === 'number';
    }
    而这里边只是把一个函数引用返回给调用者而已,方便调用。是闭包的一种引用。(function(){
        var a = 20;
        function b(){
            alert(a)
        }
    })()这里边方法要调用,不调用,代码只是一段代码。
      

  6.   

    我 推荐你用第2 种为什么?
    因为var func=(function(){var a=20; return function(){alert(a)}})()window.func=(function(){var a=20; return function(){alert(a)}})()
      

  7.   


    // 代码1:
    (function () {
        // 这里就是闭包
    })();
    其实最容易理解的闭包, 就是函数...
    '代码1' 是一个特殊的函数, 它没有名称, 它后面跟了执行 '();', 
    目的就是要执行该匿名函数, 获得它的闭包效果, 
    这个函数没有名字, 所以以后也不会调用它.// 代码2:
    function test () {
        // 一个 function , 就是一个闭包环境
    }
    一个闭包的例子:// test 是一个函数(函数是具体的对象, 闭包是对象的效果. 函数有闭包, 好比太阳有光芒)
    function test () {
        var count = 0;
        return function () {
            return (count ++);
        };
    }var f1 = test();       // 第一个闭包
    console.log (f1());    // 输出 0
    console.log (f1());    // 输出 1
    console.log (f1());    // 输出 2var f2 = test();    // 这次执行, 创建了第二个闭包
    console.log (f2());    // 输出 0
    console.log (f2());    // 输出 1
    console.log (f2());    // 输出 2
      

  8.   

    楼主的 '代码一' 和 '代码二' 都是闭包,不一样的是, 代码一把闭包环境里的一个函数, 赋值给了 window.func, 是把它赋值到了全局作用域里.代码二, 使用 return 语句, 把函数送到了外层作用域里, 这里的外层作用域, 并不一定代表 全局作用域,
    即 var func 并不一定就是 window.func.如果把代码二放在一个函数里.function foo () {
        var func = (function(){var a=20; return function(){alert(a)}})();   // 代码二    // 这里会成功.
        func();
    }// 这里就会失败, func 是 foo 的局部变量, 在外部不可访问
    func();
      

  9.   

    别把这个return想复杂了,return 就是返回值,你返回了一个匿名函数,并且用变量func来接收它关于闭包的解释:在一个函数块内,出现内部函数使用函数块变量,就可以理解为这时一个闭包结构