当前位置: 移动技术网 > IT编程>网页制作>CSS > 关于函数参数引用介绍

关于函数参数引用介绍

2018年04月17日  | 移动技术网IT编程  | 我要评论

函数参数的引用是按值引用的,这句话理解的不是很好。对于基本数据类型,比较好理解。具体例子也是常见:

var num1 = 10 

var num2 = num1; 

console.log(num2)//10 

num2 = 0 

console.log(num2)//0 

console.log(num1)//10 

就是num2 复制了num1的value.之后两个变量在栈stack中是并存的,互不影响的两个独立变量,修改一个值不会影响另一个。函数中体现如下:

   `

var count = 5

function test(num){

        num = 10

        return num

var res = test(count) 

console.log(res)//10 //res是在函数中生成的新变量。传入时初始值为5,在函数内部被修改成10。而这一变化不影响count本身的值。 

console.log(count)//5 

`

引用数据类型在理解的时候要绕个弯。我们很容易答出下面的例子:

var obj = { 

id:1 

var obj2 = obj; 

obj2.id=0 

console.log(obj2.id)//0 

console.log(obj.id)//0 

对象在被复制时,是复制的指针。即obj和obj2在堆heap中是指向同一个位置的。obj2修改了该位置的值,就等于修改了obj的值。 

在函数中也常见该知识的运用:

var vehicle1 = { 

id:1, 

plateNumber:'鲁B12345' 

function reset(veh){ 

veh.id=0 

return veh; 

var result = reset(vehicle1) 

console.log(result.id)//0 在函数内部,传入的是指向vehicle1的指针 

console.log(vehicle1.id)//0 

但是上面的例子怎么说明引用数据类型也是按值引用的呢? 

有的人解释是:对于引用数据类型,其值就是指针。我目前也是这么理解的,但是还是有点不透彻,不像基础数据类型那样明白。但是有个例子很好的佐证了这个观点:

var obj1={ 

id:0 

function testObj(obj2){ 

obj2 = { 

id:2 

return obj2; 

var res = testObj(obj1) 

console.log(res.id)//2 

console.log(obj1.id)//0 

res.id=4 

console.log(res.id)//4 

console.log(obj1.id)//0

在上面例子里,在函数内部重新实例化了一个对象。即函数参数初始值是传入的obj1 , 但是在函数内该变量的指针被修改,指向了id为2的位置,和obj1是互不影响的。当又一次修改res的id时,obj1仍然保持不变。 

在这个例子里,作为被传递的引用类型的值:指针,一旦在函数内部被修改后,也和之前的变量失去了联系。

不知道上面的分析有无不妥之处,欢迎朋友们指出和交流。多谢。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网