Somewhat in defiance of what any sane person would think is common sense, ColdFusion 9 (and accordingly 10) has been hard-coded to ignore this statement:
local = structNew();
Or:
local = {};
This is to provide "backwards compat" with people who have traditionally used local
as a pseudo local scope in older versions of CF.
Adobe did this on purpose, believe it or not.
You can demonstrate this by running this code on cflive.net:
function f(){
var local = {};
local.a = "set at top";
local = {};
writeDump(var=local);
}
f();
Railo, bless 'em, have followed ColdFusion's lead here, for the sake of cross-compatibility.
Adobe did a very daft thing here, and now we're stuck with it. But that's why you're seeing what you're seeing.