当函数传入参数是引用类型的几种情况和现象。

 1         function hehe(o,oo){
 2             o = ‘xoxo‘
 3             oo.ins.name = ‘zhangmingzhi;‘
 4         }
 5         var obj = {
 6             ins:{
 7
 8             }
 9         }
10         hehe(obj.ins,obj);
11         console.log(obj);

情况1,传入参数为oo,为一个引用类型的时候,参数修改的值会体现在外部 即obj中。

情况2,传入参数为o,为一个引用类型,参数修改的值在外部obj.ins体现不出来

根据情况2的猜想:可能是obj在栈上的引用地址可能只是储存了obj 而ins则在堆上真实的地址上。如果把obj.ins作为参数传递进去的话,那么操作這个传入的值就是没有栈地址的值,自然在方法里修改的就体现不到外面的obj对象中了

PS:以上只是猜想,回去翻翻书。。

时间: 2024-11-06 09:46:33

当函数传入参数是引用类型的几种情况和现象。的相关文章

[python]关于函数传入参数

在传入参数时有两个特殊参数,*args,**kwargs,功能如下: def foo(*args, **kwargs): print 'args = ', args print 'kwargs = ', kwargs print '---------------------------------------' if __name__ == '__main__': foo(1,2,3,4) foo(a=1,b=2,c=3) foo(1,2,3,4, a=1,b=2,c=3) foo('a', 1

main函数传入参数

最近几天在写一个模仿windows自带的ping程序,也从网上找过一些源码,但大都需要向主函数main中传入参数,这里简单总结一下向主函数中传参的方法. 方法一:项目->属性->调试->命令行参数输入参数 这个方法比较适合调程序时使用 方法二:运行->cmd->转到程序所在路径->程序名.exe 参数->回车 版权声明:本文为博主原创文章,未经博主允许不得转载.

向线程中的函数传入参数的注意事项

1. 当函数的形参类型为 string, 而传入的参数类型为 char[] 时, 需要在线程函数中转型, 如此可以避免空悬指针.如: void f(int, std::string const&); void oops(int some_parm) { char buffer[100]; sprintf(buffer, "%i", some_parm); //std::thread(f, 3, buffer) //not do this std::thread(f, 3, st

C++中必须用参数列表初始化的4种情况

在C++中,必须使用构造函的参数列表来初始化成员变量的4种情况如下:(1)成员变量类型为 const int m_nData; class  test { private:    const int m_nData; public:    test():m_nData(120){} }; (2)类中有引用型变量  class  test  {   private:            int m_nData;      const int & m_nTest;   public:      t

[反汇编]对于函数传入参数时的分析

push a push b push c push d call xxx 则翻译过来为 xxx(d,c,b,a). 我们分析时,将push从上往下看,push d 作为第一个参数. 因为你从下往上,你不确定一个push a到底是第几个参数,只能确定其右边最后一个参数. 而从上往下看,就能比较清楚了. 原文地址:https://www.cnblogs.com/onetrainee/p/11785674.html

js简单封装能向回调函数传入参数的事件处理函数

<!doctype html> <html> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <input type="text" id="fInp"/> <script> var eventRegister = function(dom,

mybatis传入参数类型parameterType和输出结果类型resultType详解

前言 Mybatis的Mapper文件中的select.insert.update.delete元素中都有一个parameterType和resultType属性,parameterType属性用于对应的mapper接口方法接受的参数类型,resultType用于指定sql输出的结果类型. resultType:指定sql输出结果类型,总共就两种: 1. 基本数据类型. 2. pojo类类型.mybatis将sql查询结果的一行记录数据映射为resultType指定类型的对象.如果有多条数据,则

C++函数的传入参数是指针的指针(**)的详解

要修改变量的值,需要使用变量类型的指针作为参数或者变量的引用.如果变量是一般类型的变量,例如int,则需要使用int 类型的指针类型int *作为参数或者int的引用类型int&.但是如果变量类型是指针类型,例如char*,那么需要使用该类型的指针,即指向指针的指针类型 char* *,或者该类型的引用类型char*&. 首先要清楚  不管是指针还是值传入函数后都会创建一个副本,函数结束后值内容不能传出来是因为值的副本,而传入的值并没被修改,指针能传出来是因为我们修改的是指针指向的内容而不

把一个函数作为参数传入到函数中

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <body> <script> function f1(func){ //func函数作为参数传入f1函数 console.log('1'); //首先进入f1函数 setTimeout(function(){ console.log('2'); //继续进入setTimeout方法