2018-04-03

nodeJs  API接口熟悉。

js是按值传递还是按引用传递?http://bosn.me/js/js-call-by-sharing/

function changeStuff(a, b, c){

  a = a * 10;

  b.item = "changed";

  c = {item: "changed"};

}

var num = 10;

var obj1 = {item: "unchanged"};

var obj2 = {item: "unchanged"};

changeStuff(num, obj1, obj2);

console.log(num);

console.log(obj1.item);   

console.log(obj2.item);

10;changed;unchanged;

按值传递: 不可变。函数的形参是被调用时所传实参的副本,形参的改变不会影响实参。JS的基本类型都是按值传递的。

按引用传递:函数的形参是实参的隐式引用,不是副本。函数的形参被修改,实参也会被修改。两者指向的是相同的值。

按共享传递:准确来说,JS不存在按引用传递,只是传递引用。即JS中对象按共享传递。

varobj={x:1};functionfoo(o){o=100;}foo(obj);console.log(obj.x);// 仍然是1, obj并未被修改为100.

该策略的重点是:调用函数传参时,函数接受对象实参的引用副本。在共享传递中对函数形参的赋值不会改变实参的值。

然而,虽然引用是副本,引用的对象是相同的。他们共享相同的对象,所以修改形参的对象属性值,也会影响到实参的属性值。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容