2017-12-11 13 views
1
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配列には3つのレイヤーオブジェクトが含まれている必要がありますが、最初のレイヤーの後で停止します。 layer.nodesおよびnodes.weightsと同じです。 ご協力いただきありがとうございます。forループがない場合のオブジェクトコンストラクタ

答えて

1

forループでvar i = 0を使用して、新しいローカル変数を作成する必要があります。

forステートメントでただi = 0だけを使用すると、iが既に存在することが予想されます。そうでない場合は、コードの最上位にvar i = 0と書いたのと同じように、グローバルレベルで作成します。 iを参照するその後のforループはすべて、独自のローカルiではなく、この新しいグローバルiを使用します。そのため、ネットワークコンストラクタが最初のレイヤコンストラクタを呼び出すと、グローバル関数iは元の関数に戻ると2に設定されます。ネットワークループに戻り、iを1だけ増分して3にした後、条件をチェックして、他のレイヤーを作成せずに終了します。

0

forループでは、ループ変数iを宣言するときに、var

を使用します。
関連する問題