var test=new network([2,3,1]);
test.reset();
console.log(test.layers);
function network(args){
this.layers=[];
this.numberoflayers=args.length;
this.reset=
function(){
for(i=0;i<this.numberoflayers;i++){
this.layers.push(new layer(args[i],args[i+1]));
this.layers[i].reset();
}
}
}
function layer(num,numlayer){
this.nodes=[];
this.reset=
function(){
for(i=0;i<num;i++){
this.nodes.push(new node(numlayer));
this.nodes[i].reset();
}
}
}
function node(num){
this.weights=[];
this.reset=
function(){
for(i=0;i<num;i++){
this.weights.push(0);
}
}
}
这段代码是我创建神经网络的尝试。问题是,当我运行代码时,它只为每个数组创建第一个对象,而不是循环遍历它应该创建的所有对象。例如,test.layer数组应包含三个图层对象,但在第一个图层对象之后停止。与layer.nodes和nodes.weights相同。 在此先感谢您的帮助。
答案 0 :(得分:1)
您需要在for循环中使用var i = 0
才能创建新的局部变量。
当你在for语句中单独使用i = 0
时,它期望i
已经存在。如果没有,它会在全局级别创建它,就像您在代码的顶层编写var i = 0
一样。引用i
的所有后续for循环都将使用此新的全局i
,而不是拥有自己的本地i
。因此,当您的网络构造函数调用第一个层构造函数时,一旦返回到原始函数,全局i
将被设置为2。回到网络循环中,它将i
递增1,使其为3,然后检查条件并退出而不创建其他图层。
答案 1 :(得分:0)
在声明循环变量i时的for循环中,使用var