为什么执行功能不起作用?

时间:2011-10-12 14:10:11

标签: javascript

我有一个输入,当我点击时 - 我想看到'1,2,3,4 ......'的警报(每次按下)

<input type='button' value='press' onclick='Clicked();'  />

 <script>
  var t
    function Clicked()
      {
        t=func;
        t();
      }  


     function func()
      {
        var count=0;
         return new  function ()   // <===  new or not new ???
          {
          count++;
          alert(count);
          }
      }
 </script>      

If im adding the 'new' in the return and click , it says : '1,1,1,1,...'

如果我删除'新'它不起作用......

我的目标是使用它来获得:'1,2,3,4 ......'

有人可以向我解释会发生什么吗?

5 个答案:

答案 0 :(得分:2)

您需要使用返回的函数:

var t = func()
function Clicked() {
    t();
}  

function func() {
    var count=0;
    return function () {
        count++;
        alert(count);
    }
}

Example

答案 1 :(得分:1)

您必须将count声明放在“func”函数之外并放入全局命名空间。像这样:

var count=0;
function func() {
    count++;
    alert(count);
}

答案 2 :(得分:1)

每次clickevent触发时你都会创建一个新的var计数。你应该将var count = 0放在函数外部作为全局变量..

哦,顺便说一句,请退出返回的东西,这将正常工作:

var count = 0;
function func()
{
    count++;
    alert(count);
}

并调用此方法:func();

答案 3 :(得分:1)

您收到1,1,1,1,因为您每次拨打func()时都会重新定义计数。

在您的情况下,您需要将count变量放在全局范围内:

var t; var count = 0;

或改变你做事的方式:


var t = 0;
function Clicked(){
    t = func(t);
}  


function func(count){
    count++;
    alert(count)
    return count;
}

我个人喜欢第二个。你有更少的全局变量,少一个函数声明,它更清晰

答案 4 :(得分:1)

var t
function Clicked()
{
    t=func;
    t();
    }  

var count=0;
function func()
{

    return new  function ()   // <===  new or not new ???
    {
        count++;
        alert(count);
    }
}