var t = new fire();
=
var t = function(){
        console.log(++sta);  //这句话为什么不执行?
    };你都没叫他执行,他怎么会执行。

解决方案 »

  1.   

    第一个是返回一个函数  但没执行 
    同理 第二个先执行alert 之后返回函数交给koke  也就是说koke 并不是你定义的那个函数  二是返回的那个函数  之后交给setInterval一直执行返回的那个函数了啊
      

  2.   

    我也是初学,自己的分析,请各位大大指教
      function fire() {
                    window.setInterval(function () {
                        var sta = 0;
                        alert(++sta);//重复执行
                        return function () {
                            console.log(++sta);  //这句话为什么不执行?
                        };
                    }, 1000);
                }          
                fire();
    setInterval 似乎只是repeat 执行第一个参数的函数(不管你return 什么都不会影响它,也不会执行)  function fire() {
                    window.setInterval((function () {
                        var sta = 0;
                        alert(++sta);//只执行一次     
                        return (function () {
                            console.log(++sta);//这样既然可以不停的执行,好纳闷呀!
                        });
                    })(), 1000);
                }
                fire();
    但是如果你传入的参数是个自执行函数 (function(){})() 的话,如果没有写return 函数,第2次执行时就会报错了。
    而如果你写了return 函数,它将执行 return 后的函数 .
    至于原理是怎么样,在这还请教各位大师了!!
      

  3.   

    第一个例子中  koke是一个未执行的函数  它表达的意思是 只有我被执行了 我就返回另一个未执行函数
    第二个例子中  koke是一个立即执行的函数 它表达的意思是 返回一个未执行函数
    然后结合setInterval 函数的使用   就是你能看到的情形了
      

  4.   

    把问题拆开了来看吧
    功能:/*
      先说下面这句
      1:koke要求是一个函数
      2:每隔一秒执行这个函数一次
    */
    window.setInterval(koke,1000);在上面的前提下,我们再来搞清楚,你两个方法返回的koke到底到底是什么
    在你两个方法中,将构造函数实例的注释掉,我们改成这样
    alert(koke); 
    //var t = new fire();
    此时,可以看到,第一个方法返回的是
    function (){ 
        var sta = 0; 
     
        alert(++sta);//重复执行 
          
        return function(){ 
            console.log(++sta);  //这句话为什么不执行? 
        }; 
    }
    第二个方法返回的是:
    function (){ 
            console.log(++sta);//这样既然可以不停的执行,好纳闷呀! 
        }这样,就很明白了
    1:你第一个方法返回的是koke自身,然后通过setInterval每隔一秒执行它自身;如果你先抛开var t = new fire();不理.把它换成koke();然后console.log(++sta);  没有被执行到,你会觉得奇怪么?2:你第二个方法返回值是以console.log为主体的一个函数,然后通过setInterval每隔一秒执行它.其等效于:
    var sta = 0; 
    function log(){ 
        console.log(++sta);//这样既然可以不停的执行,好纳闷呀! 
    }; 
    window.setInterval(log,1000); 
    如果把你第二个方法换成上面写的这样,你应该能理解为什么它可以不停的被执行吧?
    然后再回过头来说,为什么第二个方法返回的值是那样
    首先你需要了解一下自执行的匿名函数:(function(){函数体})();这样的写法会使得函数体被立刻执行var koke=(function(){你的函数体})()
    //它会先执行函数体,然后将函数体的执行结果返回给koke,函数体的执行结果就是:执行alert;return function (){console.log(++sta);}
    //所以,koke的最终结果是等于后面return 的那个函数
      

  5.   

    补一句,其实你第二个方法就相当于第一个方法改成下面的样子:
    clock = window.setInterval(koke(),1000);
      

  6.   

    第一个问题,没有调用函数 
    return (function(){
            console.log(++sta);//这样既然可以不停的执行,好纳闷呀!
        });第2个问题:
    你的 koke 相当于:
    function(){
            console.log(++sta);//这样既然可以不停的执行,好纳闷呀!
        }
      

  7.   

    var t = new fire();
    意思:var t = {}; fire.call(t);第一次 koke 是一个function  所以每次调用 都要执行第二次   (function(){])(); 这个是匿名函数执行,返回一个 “(function(){
            console.log(++sta);//这样既然可以不停的执行,好纳闷呀!
        });” 这是也是个function 
      

  8.   

    其实两个都是差不多,都有return返回值。唯一的区别是第一个是返回了鞭炮(function),第二个是返回了点燃的鞭炮(function execution),所以每次都会响。