上海建设行政主管部门网站,网站开发教程 视频 ssh,42区 网站开发指南,鞍山seo公司一#xff1a;什么是引用传递
引用传递是相对于值传递的。那什么是值传递呢#xff1f;值传递就是在传递过程中再复制一份#xff0c;然后再赋值给变量#xff0c;例如#xff1a;
let a 2;
let b a;在这个代码中#xff0c;let b a; 就是一个值传递#xff0c;首先…一什么是引用传递
引用传递是相对于值传递的。那什么是值传递呢值传递就是在传递过程中再复制一份然后再赋值给变量例如
let a 2;
let b a;在这个代码中let b a; 就是一个值传递首先它将a的值复制下来再赋值给b最终这里的 a 和 b 指向的是两块儿内存空间那什么又是引用传递呢引用传递就是两个变量没有独立的内存空间它们指向的是同一块儿内存空间。
二js里面有引用传递吗
结论在es6模块化之前js是没有严格意义上的引用传递的。
有人可能会说怎么会没有呢赋值对象的时候不是用的引用传递吗事实上js里面赋值对象时同样是值传递代码如下
let a {num: 0
}
let b a;
b.num 2
console.log(a.num) // 2以上代码看上去好像 a 和 b 指向的同一块儿地址修改了 b 以后 a 也改了但是这其实不是引用传递。我们都知道js存储对象时真实数据都存储在栈里面a的值其实是一个指向对象的地址而执行 let b a;时其实是将a存储的地址复制了一份给b看起来是修改的 b 的值其实修改的是b指向的栈里面的值而 a 也指向这个空间所以 a.num 变化了但是对于a和b本身是没有影响的。而如果是引用传递那么当我执行 b 2 时a也会等于2这才是二者指向同一块儿空间。
三哪里有引用传递
引用传递在es6之前时完全没有的在es6中只有在模块化的时候的 export 和 import 是用的引用传递代码如下
export let a 1;
setTimeout((){a 2;
},1000)这个代码很简单就是到处一个a的变量并且在1秒后改变它的值按照一般的想法来看这个修改应该是不会影响到其他导入这个a的文件的但是事实上它是会修改的代码如下
import { a } from xxx
console.log(a); // 1
setTimeout((){console.log(a) // 2
},1500)最后的结果如下在这个文件里面改了a的值以后也影响到了其他导入的文件
四作用
讲了这么多那这个东西有什么用吗这东西用处不大就有一点需要注意就是当多个敌方都引用一个的时候一个地方修改了其他地方都会修改偶尔可能会导致一些bug出现