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.

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

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

你可能感兴趣的:(2018-04-03)