【发布时间】:2014-02-04 18:25:42
【问题描述】:
这是我要问的关于此功能的第三个问题(我是否应该在这一点上完全重做它,也许)。
该函数建立一个参数定义大小的网格,并插入来自函数的数据,也是参数定义的。我正在尝试能够在包含唯一对象的网格中创建一个网格,尽管here 和here 已经得到了很多问题的解答*谢谢@Bergi,我还有另一个问题:
这里是代码,控制台的一些日志显示里面的内容:
//Build a 3x3 grid constructor that can optionally pre-insert values into each cube
function buildGrid(rows,cols,dataFunction){
console.log("Let's see, we have an order for "+rows+" rows, "+cols+" cols and within each,"+dataFunction);
//check to see if dataFunction provided, and type
if(arguments.length !== 3){
dataFunction = function(){return 0;};
}
var customGrid = [];
//create grid
for(row=0;row<rows;row++){console.log("creating row "+(row+1)+" of "+rows);
var customRow = [];
for(col=0;col<cols;col++){console.log("creating col "+(col+1)+" of "+cols);
if(typeof dataFunction == 'function'){
data = dataFunction();
}
else{
data = dataFunction;
}
customRow.push(data);console.log("finished col "+(col+1)+" of "+cols);
}
customGrid.push(customRow);console.log("finished row "+(row+1)+" of "+rows);
}
console.log("Grid completed");
return customGrid;
}
函数调用如下所示:
var myGrid=buildGrid(3,3,function(){return buildGrid(2,2,buildSquare)});
buildSquare 只是一个构造函数。
现在是控制台日志:
evalresult[eval12][52]:
Let's see, we have an order for 3 rows, 3 cols and within each, function (){return buildGrid(2,2,buildSquare)}
evalresult[eval12][61]:
creating row 1 of 3
evalresult[eval12][63]:
creating col 1 of 3
evalresult[eval12][52]:
Let's see, we have an order for 2 rows, 2 cols and within each, function buildSquare(){counter++;return new Square();}
evalresult[eval12][61]:
creating row 1 of 2
evalresult[eval12][63]:
creating col 1 of 2
evalresult[eval12][73]:
finished col 1 of 2
evalresult[eval12][63]:
creating col 2 of 2
evalresult[eval12][73]:
finished col 2 of 2
evalresult[eval12][76]:
finished row 1 of 2
evalresult[eval12][61]:
creating row 2 of 2
evalresult[eval12][63]:
creating col 1 of 2
evalresult[eval12][73]:
finished col 1 of 2
evalresult[eval12][63]:
creating col 2 of 2
evalresult[eval12][73]:
finished col 2 of 2
evalresult[eval12][76]:
finished row 2 of 2
evalresult[eval12][78]:
Grid Completed
evalresult[eval12][73]:
finished col 3 of 3
evalresult[eval12][76]:
finished row 3 of 3
evalresult[eval12][78]:
Grid Completed
发现问题了吗?首先较大的 3x3 函数开始,在“data = dataFunction();”处,开始调用内部 2x2 函数。一旦 2x2 函数完成,函数应该跳转到 3x3 网格的下一部分,而是返回不完整的网格。我认为 for 循环变量(即“行”和“列”)将与其小范围内的值相关联,并且内部 2x2 网格的 FOR 变量不会影响 3x3 网格中外部范围的 FOR 变量.这是怎么回事?
我在这里错过了什么?
非常感谢大家。
【问题讨论】:
标签: javascript recursion scope