我以为只会alert一次了
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>
<script type="text/javascript">
function Go(){
var arg;
return function(){
if(!arg){
alert(arg);
arg = true;
}
}
}
Go()()
Go()()
Go()()
Go()()
Go()()
</script>
</body>
</html>

解决方案 »

  1.   

    var arg; 是局部变量,放到Go()之前就行了
      

  2.   

    var arg是方法内部的一个变量,每次调用这个方法的是,都被初始化了,所以!arg==true,每次都会alert
      

  3.   

    var变量后每次go()就是一个直接调用。
      

  4.   

    LZ应该是在玩闭包吧
    一级函数或作用域取得的变量,而这些变是不会随上一级函数的执行完成而销毁
    所以应该这么写才对.........
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    </head>
    <body>
    <script type="text/javascript">
    function Go(){
    var arg;
    return function(){
    if(!arg){
    alert(arg);
    arg = true;
    }
    }
    }
    var ss = Go()()
    ss()
    ss()
    ss()
    ss()
    </script>
    </body>
    </html>
      

  5.   

    写错了  -_-!!
    var ss = Go()
      

  6.   

    var arg; 是在GO里面才并定义,并初始化的
      

  7.   

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    </head>
    <body>
    <script type="text/javascript">
    //每次通过Go()来获取下面的function时都会重新创建一个新的arg对象。所以每次都alert
    var arg;//方法1 放到外边
    function Go(){
    //方法2 直接删除arg 加不加到外边都可以
    return function(){
    if(!arg){
    alert(arg);
    arg = true;
    }
    }
    }
    Go()()
    Go()()
    Go()()
    Go()()
    Go()()
    </script>
    </body>
    </html>
      

  8.   

    因为你每次Go()都会var arg;一次