When it comes to programming language variables there are two flavors, early binding and late binding. An early binding language needs to know what type variables will be ahead of time, if 'x' is going to store a number it's not going to store a string and vice versa. Late binding means you can define variables and depending on how they get used, the programming language determines retroactively what kind of variable you needed.
Based on how my 3yr old understands things, I'm tempted to think of it as early-binding. He doesn't yet know how to let words temporarily represent abstract concepts he doesn't understand. Instead if you start to explain something, he'll expect you to define and explain a word that he didn't understand, rather than making sense out of the word as its used in context.
It's not so upsetting that he can't do these things yet, these are very abstract concepts which he will develop in time. It's interesting though, for me to look back on all the programming languages I've come to know and see how as they mature, they're expected to allow for the more flexible late binding.