如何将索引变量放在for ... in local in local scope中?

jan*_*jan 1 coldfusion scope for-in-loop

每当我使用for ... in循环时,循环的索引变量似乎总是在变量范围内.
例如,如果我有一个使用此循环的方法的组件:

for(key in params){  
    writeOutput(key);  
}
Run Code Online (Sandbox Code Playgroud)

变量'key'将放在变量范围内.如果我已经在组件中的任何地方声明了variables.key,那么当我将它用于... in循环时,该值将被覆盖.我真正需要的是这样的:

for(var key in params){
    writeOutput(key);
}
Run Code Online (Sandbox Code Playgroud)

但是这会引发解析错误.

有没有办法将for ... in index放在与变量范围不同的范围内?

Jam*_*ham 10

如果您事先没有var,则CFC中的默认范围是变量.

你必须像这样改变循环外的索引: -

var key = "";

for(key in params){
    writeOutput(key);
}
Run Code Online (Sandbox Code Playgroud)

另一种方法是避免在函数中修改所有内容,即在"本地"结构中声明变量.在CF9中内置了一个本地范围,但对于CF8或更低版本,请执行以下操作: -

var local = structNew();

for(local.key in params){
  writeOutput(local.key);
}
Run Code Online (Sandbox Code Playgroud)