js基本类型 引用类型
参考 https://segmentfault.com/a/1190000005794070 http://blog.csdn.net/yummy_go/article/details/50504688
先看示例:
(function () { var temp=11.11; function change(value) { value=22.22; } change(temp); console.log(temp); //11.11 未改变 })();
(function () { function change(value) { value.name = "mm" } var obj={name:"meng"}; change(obj); console.log(obj.name); //mm 改变 })();
从上面的例子可以看出,基础类型(String,Boolean,Number)中形参不改变实参,引用类型(Array,Object)中形参改变了实参。
究其原理,首先说明,js是按值传递的。基础类型正好符合这一点,而引用类型“改变”这种传递的原因是,对象(或数组)中的实例引用都指向了同一块内存,即共同的父类,修改其中一个,也就改变了父类和兄弟类。
突然想到,前两天整理的“深度克隆” http://www.cnblogs.com/chenluomenggongzi/p/6160525.html
其实也是同样的原理,浅克隆错误的原因是:把引用类型错误的当成是基础类型去克隆了。
还有angular中的坑 http://www.cnblogs.com/chenluomenggongzi/p/6151417.html 第四条
其实原理也类似。只是它强制把基础类型变成了引用类型,从而使得不同作用域可以访问同一处内存。
myGitgub https://github.com/mfx55
希望我的博客能帮到你