如果我这样做:
<script type="text/javascript">
$(document).ready(function(){
$('#service_type').change(function () {
$('#service_info').show('slide');
});
});
</script>
在func中引用foo错误了吗?
答案 0 :(得分:1)
没关系,只有在改变上下文时才需要注意(在本地指针变量的情况下):
package main
import (
"errors"
"fmt"
)
func test() {
defer func() { fmt.Println(1) }()
defer func() { fmt.Println(2) }()
defer func() { fmt.Println(3) }()
}
func main() {
test()
err := errors.New("error 1")
defer func() { fmt.Println(err) }()
err = errors.New("error 2")
}
并且还看到:
https://www.goinggo.net/2014/06/pitfalls-with-closures-in-go.html
答案 1 :(得分:-3)
它不是“错误的”,但它不是好的做法。
让我稍微扩展一下。
让我说我这样做:
func main() {
foo := 1
go func() {
foo = 2
fmt.Println(foo)
}()
}
在上面的情况中,将打印2。现在假设foo := 1
和foo=2
之间有20多行。由于变化不是明确,因此您很有可能获得您不期望的行为并且您将很难跟踪。相反,你应该这样做:
func main() {
foo := 1
go func(bar int) {
bar = 2
fmt.Println(bar)
}(foo)
}
现在,代码明确更改了bar
中foo
(相当于func(int bar)
)的值。要更改foo
中main
的值,请执行以下操作:
func main() {
foo := 1
go func(bar *int) {
*bar = 2
fmt.Println(*bar)
}(&foo)
}