我们都知道javascript的基础数据类型有: Undefined
、 Null
、 Boolean
、 Number
、 String
。
如果从一个变量向另一个变量复制基本类型的值,会在变量对象上创建一个新值,然后把值复制到为新变量分配的位置上。
- code
var num1 = 1;var num2 = num1; // 1num2 = 5; // 5 console.log(num1) // 1
此后,这两个变量可以参与任何操作而不会相互影响。
- 函数传参有有区别吗?
var a = 5function b(num) { num = 4 return num}b(a); //4a; //5
- 注意这只是基本数据类型, 如果改成引用类型会怎么样?
var p1 = { name: "Tom"}function b(obj) { obj.name = "Jerry" return obj}b(p1) // { name : "Jerry"}p1.name // Jerry
栈内存 | 堆内存 | |
p1, obj | 指针地址 | { name :"Tom" } |
obj.name = "Jerry"
obj修改了堆内存里的name值, p1还是指向那个地址. 所以p1跟着变了.
- 这样会怎么样?
var p1 = { name: "Tom"}function b(obj) { obj.name = "Jerry" obj = {} obj.name = "Jack" return obj}b(p1) // { name : "Jack"}p1; // { name: "Jerry" }
看到结果按照上面的意思应该p1也是{ name : "Jack"}
但是为什么不同呢?
1 . 先修改了共同指向的堆内存里的name值
- 第一步
栈内存 | 堆内存 | |
p1, obj | 指针地址 | { name :"Tom" } |
- 第二步
栈内存 | 堆内存 | |
p1, obj | 指针地址 | { name :"Jerry" } |
2 . obj重新赋值引用类型,其实就是改变了obj的指针,并没有改变p1的指针指向的地址里的值
- 第三步
栈内存 | 堆内存 | |
p1 | 指针地址 | { name :"Jerry" } |
obj | 指针地址 | { } |
- 第四步
栈内存 | 堆内存 | |
p1 | 指针地址 | { name :"Jerry" } |
obj | 指针地址 | { name: "Jack" } |
原文转载:http://www.shaoqun.com/a/494917.html
燕文物流:https://www.ikjzd.com/w/2229
文化衫事件:https://www.ikjzd.com/w/1932
跨境通电子商务:https://www.ikjzd.com/w/1329
我们都知道javascript的基础数据类型有:Undefined、Null、Boolean、Number、String。如果从一个变量向另一个变量复制基本类型的值,会在变量对象上创建一个新值,然后把值复制到为新变量分配的位置上。codevarnum1=1;varnum2=num1;//1num2=5;//5console.log(num1)//1此后,这两个变量可以参与任何操作而不会相互影响。函
上海跨境通:上海跨境通
acedota:acedota
2020深圳欢乐谷万圣节门票多少?:2020深圳欢乐谷万圣节门票多少?
如何无限操作亚马逊早期评论人计划?:如何无限操作亚马逊早期评论人计划?
宝贝去哪儿 南宁四大亲子游胜地:宝贝去哪儿 南宁四大亲子游胜地
No comments:
Post a Comment