[英]Can anyone explain to me in JavaScript language what “pointers” are?
我是正在学习Go的JavaScript编码器。 我正在关注本教程: http : //tour.golang.org/#52
package main
import (
"fmt"
"math"
)
type Vertex struct {
X, Y float64
}
func (v *Vertex) Abs() float64 {
return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
func main() {
v := &Vertex{3, 4}
fmt.Println(v.Abs())
}
我在Wikipedia和Go docs中阅读了什么是指针,但是我仍然可以理解它们。 谁能用JavaScript语言向我解释它们?
它们在某种程度上类似于JS和其他语言中的对象引用,但并不完全相同。 指针比引用更强大(因此更危险)。 考虑以下JS代码。
var a = {foo: true};
var b = a;
a.foo = false;
console.log(b); // Output: "Object { foo: false }"
这里的a
和b
都像指针。 当您执行b = a
您不克隆对象,则使b
引用(或指向 )与a
相同的对象。 在Go中,您可以执行以下两项操作:
type T struct { Foo bool }
a := T{Foo: true}
b := a
a.Foo = false
fmt.Println(b) // b is a copy, so it didn't change. Prints "{true}".
pa := &T{Foo: true}
pb := pa
pa.Foo = false
fmt.Println(pb) // pb points to the same struct as pa, so it prints "&{false}"
重要的区别在于,在JS中,您实际上无法替换函数内的对象。
var a = {foo: true};
(function(x) { x = {foo: false} })(a);
console.log(a); // Output: "Object { foo: true }"
在Go中,您可以做到:
pa := &T{Foo: true}
func(p *T) { *p = T{Foo: false} }(pa)
fmt.Println(pa) // Output: &{false}
另一个区别是,您不仅可以使指针指向结构,还可以使指针指向任何类型,包括指针。
一个古老的问题但一个明显的说法是,指针实际上是内存中变量的地址 。 通过指针传递变量时,实际传递的是此变量所在的内存地址。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.