diff --git a/manual/src/ch04-05-scopes.md b/manual/src/ch04-05-scopes.md index ed4521956fdc3fbd525fca63b0d03f8e2a598cfb..43e311583b6dda79ec34327f9c795775bb5f8a82 100644 --- a/manual/src/ch04-05-scopes.md +++ b/manual/src/ch04-05-scopes.md @@ -23,6 +23,27 @@ if test 1 == 1 # end of scope, y is deleted since it's owned by it end -echo "$x" # prints 2 -echo "$y" # prints nothing, y is deleted already +echo $x # prints 2 +echo $y # prints nothing, y is deleted already +``` + +## Functions + +Functions have the scope they were defined in. +This ensures they don't use any unintended local variables that only work in some cases. +Once again, this matches the behavior of most other languages, apart from perhaps LOLCODE. + +```ion +let x = 5 # defines x + +fn print_vars + echo $x # prints 2 because it was updated before the function was called + echo $y # prints nothing, y is owned by another scope +end + +if test 1 == 1 + let x = 2 # updates existing x + let y = 3 # defines y + print_vars +end ```