2019-06-12

2019-06-12  本文已影响0人  独角仙没有角

一直对Javscript中的值传递引用传递的感到模糊,今天来细细研究一下

概念

值传递

ction add(num) {
    num++;
    console.log("形参:", num);// 形参:21
}

var a = 20;
add(a);
console.log("实参:", a);// 实参:20

引用传递

function setNum(obj) {
    obj.num = 10;
    console.log("形参:", obj);// 形参:num = 10
}

var a = new Object();
setNum(a);
console.log("实参:", a);// 实参:num = 10

解析
当 var a = new Object();下图时变量和对象的关系;

image.png
调用setNum(a)时,下图时全局变量a和局部变量obj以及对象Object的关系:
image.png
function setNum(obj) {
    obj.num = 10;
    obj = new Object();
    obj.num = 20;
    console.log("形参:", obj);// 20
}

var a = new Object();
setNum(a);
console.log("实参:", a); // 10

解析
在函数内部创建obj对象 obj = new Object(); 下图是a和obj以及Object的关系:

image.png

这段代码在前一个的基础上,给setNum()函数中添加了两行代码:obj = new Object()改变了obj的指向;obj.num = 20给新创建的obj添加属性。根据结果来看,形参的改变并没有影响到实参,所以,在JS中,引用传递的本质就是值传递。

上一篇 下一篇

猜你喜欢

热点阅读