[IMAGE: https://ipfs.busy.org/ipfs/QmdaBD3RV3sTRdj2mVURH1pmwYUEiL5243PtSwy3Jc2shC]
Private - it's only callable from other functions inside the contract
Internal - is like private but can also be called by contracts that inherit from this one. You can see it as similar to "protected" in other languages
External - can only be called outside the contract. For example using the web3.js or from another contract
Public - can be called anywhere, both internally and externally.