Docs > Functions

Functions are declared using `fn`. For example: ``` fn f(a, b, c) { ... } ``` You can then call it using `f(a, b, c)` where `a`, `b`, and `c` are expressions. Whenever `f` is called, `...` will be run; the last value in it will be returned. Explicit return can be done with `return`: ``` fn f() { return ... } ``` Functions cannot modify outside scope, but they can modify their arguments. Functions can be used as closures, since each keeps the scope they were defined in. ## Technical Details - Every function runs in its own VM, but inherits scope from its caller.