In your youtube talk you say that you don’t know of any language which has a block structure (or anonymous function) which doesn’t see anything of its enclosing scope.
In “A Discipline of Programming”, Dijkstra’s block structure has to declare which variables in the enclosing scope are made available within the block: so by default the block cannot see anything in the enclosing scope. The block can also define its own local variables. The declaration also distinguishes which variables need to be initialised (“virgin” variables), which may be changed and which may not (“constant” variables). See pp 90–93.
This means that when reading a block of code you know exactly which symbols are going to be used, and of these, which ones may be modified and which are constant.
martin@gkc.org.uk