November 2017
Intermediate to advanced
670 pages
17h 35m
English
What if we accidentally initialized sum in an outer scope from where we defined our function? Notice that there is no sum variable initialization in the same scope as our anonymous function:
func addTwoDynamic() func() int { return func() int { sum += 2 return sum }}
When we run this in our main() function:
twoMoreDynamic := addTwoDynamic()fmt.Println(twoMoreDynamic())fmt.Println(twoMoreDynamic())
Our Go runtime looks in the environment in which the anonymous function was called, rather than where it was defined (as is the case in lexical scoping). If addTwoDynamic had been nested several stack frames deep, our Go runtime would look where addTwoDynamic was defined for sum. If it was not found there, it would continue ...