返回博客

JS 与 GoLang 的闭包比较

本文比较了 JavaScript 和 Go 语言中闭包的用法,并通过具体的代码示例演示了它们在实现相同功能时的异同。文章还解答了作者在学习 Go 语言闭包时遇到的疑惑,并对 JavaScript 中闭包的理解进行了反思。

Mt.r
|

学习 golang 时,看到闭包部分,和 js 比较相似,但是敲错代码了,再加上对结果有点疑惑,就转译成 js 了,

然后发现自己 js 是不是白学了?

package main

import "fmt"

func main() {
	var f = Adder()
	fmt.Print(f(1), " - ")
	fmt.Print(f(20), " - ")
	fmt.Print(f(300))
}

func Adder() func(int) int {
	var x int
	return func(delta int) int {
		x += delta
		return x
	}
}

输出:1 - 21 - 321

转译成 js

function add() {
  let x = 0;
  return function (data) {
    x += data;
    return x;
  };
}

let f = add();
console.log(f(1));
console.log(f(20));
console.log(f(300));

输出结果 1 21 321

好家伙,我这个 js 是不是白学了?