小白来了!关于javascript的第二个问题?

   var timer = setInterval(function(){
            alert(1);
        },1000)
/* 上面的代码在浏览器中会自动执行 */

/* 下面的代码不会自动执行 */
        var a = function(){
            alert(2);
        }

同样是用变量来保存(不知道这种说法对不对),为啥上面的会自动执行,下面的不会呢?

阅读 3.1k
6 个回答
   setInterval 这个东西叫循环定时器,
   function(){ alert(1); } 叫函数声明
   你纠结的是 2个地方都声明了一个函数,但是第一个执行了
   
   可以这么理解,定时器相当于一个碎纸机,每次都要拿一张纸来碎掉,你的
    function(){
        alert(1);
    }就是声明了一张纸给碎纸机,所以碎纸机把它碎掉了,结果就是alert(1)
    而
    var a = function(){
        alert(2);
    }
    意思就是,你好我是一张纸,我叫a,你要是把我碎掉了(没有送给碎纸机就不会被碎掉),我能alert(2)
    
    不知道好不好理解...
      
> var timer = setInterval(function(){
            alert(1);
        }, 1000)

> typeof timer
< "number"


> var a = function(){
            alert(2);
        }

> typeof a
< "function"

解释:
第一个setInterval是一个函数,第一个是将函数值赋值给了timer。
第二个是定义了一个函数。

你看看MDN对setInterval的定义

WindowOrWorkerGlobalScope 的 setInterval() 方法重复调用一个函数或执行一个代码段,在每次调用之间具有固定的时间延迟。
所以你定义的timer的值就是setInterval执行后的返回值,timer的类型是number。

然后下面的a的值,仅仅是一个匿名函数,当然不会自动执行啦。

设置了setInterval会自动执行,通过函数表达式定义的函数得手动执行

setInterval是个函数,第一个是将函数执行结果赋值给time,第二个是将函数本身赋值给a,要想第二个也执行,可以写成iife。如下

var a = (function(){
            alert(2);
        })()
var timer = setInterval(function(){
    alert(1);
},1000)

setInterval 是一个函数,setInterval()是执行setInterval函数,而alert(1)是在setInterval函数中执行的内容。

var a = function(){
    alert(2);
}

这段代码是声明一个函数

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题