0
我一直在尋找一些舊的代碼在工作,我發現了幾個嵌套循環的實例,其中用於迭代對象的變量在內部循環內被重新分配,但它不會引起問題。比如給出下面的example.cfm
:爲什麼在嵌套循環中重複使用迭代器變量不會導致ColdFusion中的問題?
<cfscript>
// Get every second value in an array of arrays
function contrivedExampleFunction(required array data) {
var filtered = [];
for (i = 1; i lte arrayLen(arguments.data); i++) {
var inner = arguments.data[i];
for (i = 1; i lte arrayLen(inner); i++) {
if (i eq 2) {
arrayAppend(filtered, inner);
}
}
}
return filtered;
}
data = [
[1,2,3],
[4,5,6],
[7,8,9]
];
// Expected (working function): [2, 5, 8]
// Expected (short-circuiting): [2]
// Actual result: [1, 2, 3]
writeDump(contrivedExampleFunction(data));
</cfscript>
我希望內i
聲明重新分配外i
並導致功能「短路」,尤其是i
甚至沒有作用域。但是該函數將返回一個不可預知的結果。爲什麼?
好地方!我在一個代碼庫中發現了幾個實例,內部循環將重新分配外部迭代變量(既沒有作用域),這對我來說也有些困擾。我想現在我有一個很好的例子,說明爲什麼*不*要做到這一點(除了瘋狂之外),而不是我認爲我有的奇怪CF行爲的例子。 –
如有疑問,請查看您的數據。像writeoutput這樣的行(「在內部循環之前我是#i#」)非常方便。 –