Ok, then the expression "x" isn't statically bound in my example.
The situation is different for a local variable inside a function body. If the lookup process for an identifier resolves such a variable, then it will always resolve to the same variable, regardless of the (static or dynamic) context of the function body. Thus the identifier expression is indeed statically bound in that case.
That is no longer (necessarily) true when the lookup process starts to search for declarations in a class scope, because class declarations can be overloaded. If it were somehow possible to inherit function bodies too and overload specific parts inside them then it wouldn't be true for local variables either.
I think it's right that the "constant" keyword controls read-onlyness without affecting binding.