Does JavaScript create a new execution context when executing a block to associate the its lexical environment with it.
No. An execution context is essentially a call stack frame, while the lexical environment is the current scope. No function gets called when a block is evaluated.
You can read in the specification for the evaluation semantics of blocks that it creates a new lexical environment (initialised with the variables in the block scope) that has the old environment as its parent, and "Set[s] the running execution context’s LexicalEnvironment
to [that value]". After executing the statements in the block, the child environment is popped off again, but the running execution context did stay the same all the time.