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.