PS seems to think that the variable named BLOCK is being captured by
the irrelevant lambda and inserts a WITH binding.

   PS> (ps (loop :for i :from 0 :below 5 :do 
             (let ((block (elt blocks i))) 
               (foo block)
               (lambda () nil))))

   "for (var i = 0; i < 5; i += 1) {
       with ({ block : null }) {
           var block = blocks[i];
           foo(block);
           function () {
               return null;
           };
       };
   };"

This doesn't happen if you take out the lambda:

   PS> (ps (loop :for i :from 0 :below 5 :do
             (let ((block (elt blocks i)))
               (foo block))))

   "for (var i = 0; i < 5; i += 1) {
       var block = blocks[i];
       foo(block);
   };"

... or even if you rename BLOCK to B:

   PS> (ps (loop :for i :from 0 :below 5 :do 
             (let ((b (elt blocks i))) 
               (foo b)
               (lambda () nil))))
   
   "for (var i = 0; i < 5; i += 1) {
       var b = blocks[i];
       foo(b);
       function () {
           return null;
       };
   };"

I thought this might be because PS had compiled a different form where
BLOCK was indeed captured by closure in a loop and was remembering
this inappropriately. But that doesn't seem right because the problem
is reproducible on a fresh restart of PS.

Daniel