js按值传递还是按引用传递?

(1)基本数据类型按值传递
基本类型的变量是存放在栈区的(栈区指内存里的栈内存),不共享内存空间

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

(2)引用类型值按引用传递
引用类型值,引用类型的值是同时保存在栈内存和堆内存中的对象。JavaScript和其他语言不同,其不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间,那我们操作啥呢? 实际上,是操作对象的引用,所以引用类型的值是按引用访问的。
数组:

事例1
var a=[1,2,3]
var b=a
a.push(4)
console.log(a) //1,2,3,4
console.log(b)//1,2,3,4

事例2
var a=[1,2,3]
var b=a
a=33  //注改变了指向
console.log(a) //33
console.log(b) //123

对象:

事例1
var obj={a:1,b:2}
var obj1=obj
obj.a=2
console.log(obj)  // {a:2,b:2}
console.log(obj1) // {a:2,b:2}

事例2
var obj={a:1,b:2}
var obj1=obj
obj=22
console.log(obj) //22
console.log(obj1) //{a:1,b:2}

你可能感兴趣的:(js按值传递还是按引用传递?)