最近刚开始看《JavaScript高级程序设计第三版》,本人程序小白刚接触编程几个月,刚开始接触JavaScript。
对一些自己看到的,不理解的知识做一下笔记。
今天学到JavaScript的值传递和引用传递,
值传递:
num1的值123传递num2的时候是把值复制到num2开辟的新的空间里。所以num2改变值也不会改变num1(这个其实很好理解)。
引用类型的引用传递:
ob传递给ob1的时候,创建改变ob1的属性值的时候ob也会发生改变。
所以就书上的理解ob在传递的时候相当于把ob指向对象的指针复制过去。
图复制指针:
为了证明我所理解的指针是不是同一个指针,我又做了以下的测试
ob1重新去指向一个对象,如果指针是一样的,那么ob也会发生改变,和想象的一样ob没有改变。
综上所述:引用复制是复制指针。(本人技术有限,只能想到这样的证明方法)
到这里视乎都能理解,不过下面的一些问题我就百思不得其解了。
上面对值传递和引用传递有了一个大致的。
这个时候看到了,JavaScript对函数的参数都是进行值传递的。
书中给了,验证的方法。
一:使用基本数据类型,(这个好理解)
num1的值通过函数是不会发生改变的,这个值传递还和理解。
后面就涉及到引用类型,在传参时候的传递。书上给的证明思路是:
把引用类型传入函数中,参数通过值传递获取指针,但指针同时指向一个对象。
所以创建改变属性的值ob也会发生改变,之后对param创建一个新的对象,ob不会发生改变。
但这个证明,我依然不能理解为什么参数的传递是值传递,这个就好比上面我证明引用传递的时候一样,也可以用引用传递来解释这个现象。
个人感觉,抛开这些名词,其实引用传递和值传递没有什么区别,就是两类型在栈中保存的值不一样,基本类型保存的是具体的值,引用类型保存的是指针,所以在参数传递的时候,就是在栈中把指针传递过去。
查了一天的资料,还是没有让自己看明白的,只能按自己的理解。
1、引用传递是在栈中保存指针;值传递是在栈中保存具体的值
2、在引用传递和值传递时,都是在栈中赋值栈中的值,所以引用时指向同一个地方(指针指向的地址一样)
3、就此可以认为引用传递时特殊的值传递(因此解释:函数的参数传递都是值传递)
以上纯属个人现阶段的笔记感悟,以后有新的想法见解在做整理!