我希望有人可以向我解释下面的代码中发生了什么。我发现很难理解为什么这种闭包对原语和引用的处理方式不同。我希望这里缺少明显的东西。
function returnFunction(x, y) {
return function() {
alert("x:" + x + " - nb of elements in y:" + y.length);
};
}
var f = 0;
var g = [];
var h = [];
for(var i = 0; i < 3; i++) {
f += 1;
g.push(i);
h.push(returnFunction(f, g));
}
for(var i = 0; i < 3; i++) {
h[i]();
}
// this is what gets returned
// x:1 - nb of elements in y: 3
// x:2 - …Run Code Online (Sandbox Code Playgroud) 我是第一次尝试Go.在过去一小时左右,我一直不知道为什么这段代码不起作用.
grid := make([][]string, 2)
for _, row := range grid {
row = []string{"foo", "bar"}
}
fmt.Println(grid)
Run Code Online (Sandbox Code Playgroud)
我希望它能打印出类似的东西
[
["foo", "bar"]
["foo", "bar"]
]
Run Code Online (Sandbox Code Playgroud)
但它反而拒绝使用该消息进行编译row declared and not used.
很明显,我错过了关于2d切片和range关键字的内容.有任何想法吗?