JavaScript,function函数参数的值传递(笔记一)

      最近刚开始看《JavaScript高级程序设计第三版》,本人程序小白刚接触编程几个月,刚开始接触JavaScript。

对一些自己看到的,不理解的知识做一下笔记。

      今天学到JavaScript的值传递和引用传递,

      值传递:

     JavaScript,function函数参数的值传递(笔记一)

      num1的值123传递num2的时候是把值复制到num2开辟的新的空间里。所以num2改变值也不会改变num1(这个其实很好理解)。

      引用类型的引用传递:

JavaScript,function函数参数的值传递(笔记一)

      ob传递给ob1的时候,创建改变ob1的属性值的时候ob也会发生改变。

      所以就书上的理解ob在传递的时候相当于把ob指向对象的指针复制过去。

      图复制指针:

      JavaScript,function函数参数的值传递(笔记一)

     为了证明我所理解的指针是不是同一个指针,我又做了以下的测试

JavaScript,function函数参数的值传递(笔记一)

     ob1重新去指向一个对象,如果指针是一样的,那么ob也会发生改变,和想象的一样ob没有改变。

     综上所述:引用复制是复制指针。(本人技术有限,只能想到这样的证明方法)


     到这里视乎都能理解,不过下面的一些问题我就百思不得其解了。


     上面对值传递和引用传递有了一个大致的。

     这个时候看到了,JavaScript对函数的参数都是进行值传递的。

     书中给了,验证的方法。

     一:使用基本数据类型,(这个好理解)

JavaScript,function函数参数的值传递(笔记一)

     num1的值通过函数是不会发生改变的,这个值传递还和理解。

     后面就涉及到引用类型,在传参时候的传递。书上给的证明思路是:

JavaScript,function函数参数的值传递(笔记一)

    把引用类型传入函数中,参数通过值传递获取指针,但指针同时指向一个对象。

    所以创建改变属性的值ob也会发生改变,之后对param创建一个新的对象,ob不会发生改变。

    但这个证明,我依然不能理解为什么参数的传递是值传递,这个就好比上面我证明引用传递的时候一样,也可以用引用传递来解释这个现象。

    个人感觉,抛开这些名词,其实引用传递和值传递没有什么区别,就是两类型在栈中保存的值不一样,基本类型保存的是具体的值,引用类型保存的是指针,所以在参数传递的时候,就是在栈中把指针传递过去。

    查了一天的资料,还是没有让自己看明白的,只能按自己的理解。

    1、引用传递是在栈中保存指针;值传递是在栈中保存具体的值

    2、在引用传递和值传递时,都是在栈中赋值栈中的值,所以引用时指向同一个地方(指针指向的地址一样)

    3、就此可以认为引用传递时特殊的值传递(因此解释:函数的参数传递都是值传递)

    以上纯属个人现阶段的笔记感悟,以后有新的想法见解在做整理!