繁体   English   中英

谁能用JavaScript语言向我解释什么是“指针”?

[英]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 }"

这里的ab都像指针。 当您执行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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM