goldEli / Front-End-Training

Front End Training
2 stars 5 forks source link

值是如何传递的? #40

Open goldEli opened 4 years ago

goldEli commented 4 years ago

说说如下代码的打印结果,并说明原因。

var a = 1
var b = {
  c: 1
}

console.log(a)
console.log(b)
console.log(b.c)

a = 2
b.c = 2

console.log(a)
console.log(b)
console.log(b.c)
FireDragonZL commented 4 years ago
lurasso commented 4 years ago

js按值传递(和java一样),如果数据类型是基本类型,传递的是内存中存放的值,如果是引用类型,传递的是内存中引用的值

1
{c:2}
1
2
{c:2}
2

第一个consle.log b输出{c:1},由于后面b.c=2修改了原本b的引用地址,因此会自动更新成{c:2}, a=2修改的是栈内存的值,输出为2

748580573 commented 4 years ago

js有基本类型传值和引用类型传值。 基本类型传值传递的是以复制值的方式传递的 引用类型传值,传递的是引用的地址。 所以输出的结果为:

1
{c:2}
1
2
{c:2}
2