except when they say a function is a variable. that's a powerful distinction. for which reason basically all languages support closures now.
also i think you can boil things down to constant, variable, type, function/method (the receiver is just a convenience) and pointer/reference. to make things easy for humans, you can then attach a symbol to these, which gives you debugging.
objects are shit because they are usually 3+ levels of indirection which opens up space for misinterpretation, long compilation times, and pernicious, hidden errors.