search

Home  >  Q&A  >  body text

javascript - JS setInterval()下面两个函数有什么区别 ?

function clock() {
  var count = 0 
  setInterval(function () {
    count++
  }, 500)
  return count
}
var zero = clock()


function clockWorking() {
  var localObj = { count: 0 } 
  setInterval(function () {
    localObj.count++
  }, 500)
  return localObj
}
var object = clockWorking()
PHPzPHPz2895 days ago194

reply all(3)I'll reply

  • 阿神

    阿神2017-04-10 17:36:37

    区分基本类型值和引用类型值。

    a = 1;
    b = a;
    a = 2;
    console.log(b);    //1

    将一个基本类型值复制给另一个变量,另一个变量就会产生这个基本类型值的一个副本。赋值以后,ab就没有关系了。

    a = {x:1};
    b = a;
    a.x = 2;
    console.log(b.x);    //2

    引用类型值保存的是一个指针,将引用类型值赋值给另一个变量,复制的其实是这个指针,这个指针指向这个引用类型所有属性和方法保存的地址。ab其实都指向了同一个地址。所以,当改变其中一个的属性,另一个的属性也会同样改变。

    你列举的第一个例子,zero复制了count的值,之后count的值随着定时器不断增加,但zero与此无关了,所以zero一直等于最开始count的值,也就是0
    第二个例子,object复制了引用类型localObj,所以localObj.count改变,object.count也跟着改变,不断打印object.count的值,你会发现这个值会一直增大。

    reply
    0
  • PHP中文网

    PHP中文网2017-04-10 17:36:37

    你直接console.info()两种结果,在谷歌F12里就可以看出来

    reply
    0
  • 怪我咯

    怪我咯2017-04-10 17:36:37

    返回值和返回引用的区别

    reply
    0
  • Cancelreply