变量及寻址方式(Ref详解)

变量的本质和New操作

所有的变量都有一个指针指向栈中的地址,不同的是简单数据类型的变量栈中存储的是操作数本身,而复杂数据类型存储的是在堆中的对象地址。

而垃圾回收的机制主要是在堆中运行,没有引用的对象会被回收。

值类型的Ref

我们都知道Ref是调用函数传递参数时 值传递和引用传递的标志 ,那么针对值类型和引用类型Ref有什么区别呢?用最简单的实例调试来说明

值类型的直接调用

在下面这个实例中我们看到 变量 a和m的地址和值都不同 ,因此值类型的直接调用是变量a复制了m的值 并对a 操作,对原来的变量m没有任何影响(变量的地址并不相同)。

值类型的ref传递

值类型的Ref传递:调试后发现a和m地址一致,即变量a 和变量 m 的地址码指向stack中的同一地址 

直接寻址: 指令的地址码字段指出的不是地址,而是操作数本身,这种寻址方式称为立即寻址方式。立即寻址由于在取出指令的同时也取出了操作数,所以指令的执行速度很快。但由于操作数是指令的一部分,不便于修改,降低了程序的通用性和灵活性。因此,立即寻址方式只适合于操作数固定的场合,通常用于为主存单元和寄存器提供常数。

m和a中地址码指向的是stack中的操作数 因此a的操作就是操作数的变化

引用类型的值传递和引用传递

引用类型的值传递:p1 和 p 本身地址码指向栈地址 在这个栈空间中存储是引用类型的地址 

在值传递的情况下p1和p指向的栈地址不同 但是栈地址中的值(即指向堆中的Person实例的地址是相同)因此P1会改变,

只有在new 对象的时候 才会在堆中 分配空间 产生对象

引用类型的引用传递

p和p1指向的栈地址相同 栈中的数据(指向堆的地址)也相同 

间接寻址方式:与直接寻址方式相比,间接寻址中指令地址码字段所指向的存储单元中存储的不是操作数本身,而是操作数的地址。因此,间接寻址方式需要多次访问主存储器,既增加了指令的执行时间,又要占用主存储器单元。但是,这种寻址方式也为编程人员带来了较大的灵活性,实现起来也很简便,而且,间接寻址指令可以访问较大的存储空间,从而扩大指令的寻址能力。由于地址码位数的限制,如果采用直接寻址方式,能够访问的存储空间十分有限,而间接寻址的地址码所指向的存储单元则有足够的位数,因此可以访问全部存储空间。

结论:

综上所述 必须清楚的一点即声明的所有的变量的变量指针都是指向stack中的, 不同的是 ,值类型的变量的stack数据是操作数本身 而引用类型的stack 数据是指向(heap)堆中的引用地址。

因此 对于引用类型来说 就没有ref和非ref之分,因为指向的堆中的对象都是同一个,对该对象的操作,都是同一个对象。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
vue 的模板 ref 可以用来在 html 模板中绑定一个变量。通过 ref,我们可以在 vue 的组件实例中访问到对应的 DOM 元素或子组件实例。具体来说,可以通过 this.$refs.变量名 来引用模板中 ref 绑定的元素或组件。 在使用 ref 绑定变量前,我们需要先定义 ref。假设我们有一个需要绑定的 input 输入框,我们可以在模板中的 input 标签中添加 ref 属性: ```html <input ref="inputRef" type="text"> ``` 这样,在 vue 实例中,就可以通过 this.$refs.inputRef 来访问这个 input 元素了。我们可以在 vue 实例的方法中获取或修改这个元素的属性或值: ```javascript methods: { getInputValue() { const value = this.$refs.inputRef.value; console.log(value); }, setInputValue() { this.$refs.inputRef.value = 'Hello World'; } } ``` 通过调用 getInputValue 方法,我们可以获取到 input 输入框的值,并在控制台打印出来。而调用 setInputValue 方法,则可以将 input 输入框的值改为 'Hello World'。 需要注意的是,ref 绑定的元素或组件在 vue 实例创建之后才能访问到。所以,如果需要在实例创建之前就访问到 ref,可以将访问 ref 的操作放在 mounted 函数或其他合适的生命周期钩子函数中。 总结而言,通过 ref 绑定变量,可以在 vue 实例中访问到模板中的元素或组件,进而操作它们的属性或值。这为我们处理 DOM 操作提供了更方便的方式

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值