执行 c() 函数时,为何是2呢?此时 c函数就是b函数呀?
1. B函数是嵌套函数呀,为何在外部也能调用呢?
2. 就算能调用,结果为何是2呢?
<HTML>
 <HEAD>
  <script type="text/javascript">
function a(){
      var i=0;
      function b(){
        alert("inner:"+ (++i));
      }
  b();
  alert("outer:" + i);
  return b;
    }  </script>
 </HEAD> <BODY>
  <script type="text/javascript">
 var c = a();  //执行下一行代码,为何是2呢?此时 c函数就是b函数呀?
 //1. B函数是嵌套函数呀,为何在外部也能调用呢?
 //2. 就算能调用,结果为何是2呢?
     c();
  </script>
 </BODY>
</HTML>

解决方案 »

  1.   


    <HTML>
     <HEAD>
      <script type="text/javascript">
        function a(){
          var i=0;
          function b(){
            alert("inner:"+ (++i));
          }
          b();
          alert("outer:" + i);
          return b;
        }  </script>
     </HEAD> <BODY>
      <script type="text/javascript">
         var c = a();     //执行下一行代码,为何是2呢?此时 c函数就是b函数呀?
         //1. B函数是嵌套函数呀,为何在外部也能调用呢?
         //2. 就算能调用,结果为何是2呢?
         c();
      </script>
     </BODY>
    </HTML>
      

  2.   

     //执行下一行代码,为何是2呢?此时 c函数就是b函数呀?  是啊。c=b
         //1. B函数是嵌套函数呀,为何在外部也能调用呢?         c=b了啊
         //2. 就算能调用,结果为何是2呢?                   因为B函数是嵌套函数呀!闭包了啊!
      

  3.   

    //执行下一行代码,为何是2呢?此时 c函数就是b函数呀? c=b
         //1. B函数是嵌套函数呀,为何在外部也能调用呢?// var c = a();这是函数a会运行一次,而且i的值会发生变化,i已经变成1,
         //2. 就算能调用,结果为何是2呢?//c();调用函数b,++i,输出i就是2了。函数b是一个闭包。
    看看闭包方面的内容http://stackoverflow.com/questions/111102/how-do-javascript-closures-work
      

  4.   

    详见http://baike.baidu.com/view/648413.htm