javascript - JS setInterval()下面两个函数有什么区别 ?
PHPz
PHPz 2017-04-10 17:34:37
0
3
200
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()
PHPz
PHPz

学习是最好的投资!

全員に返信(3)
阿神

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

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的值,你会发现这个值会一直增大。

いいねを押す +0
Ty80

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

いいねを押す +0
刘奇

返回值和返回引用的区别

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート