javascript
1class sample{ 2 searchavailavle(){ 3 var arr=[] 4 for(var i=0;i<8;i++){ 5 for(var j=0;j<8;j++){ 6 if(this.isavailable([i,j])){ 7 arr.push([i,j]) 8 } 9 } 10 } 11 return arr 12 } 13 14 randomput(){ 15 var arr=this.searchavailavle(); 16 var randnum = Math.floor( Math.random() * arr.length ) 17 console.log(arr); 18 this.putstone(arr[randnum])} 19 20 21 22 check(id){ 23 var y=parseInt(id/10) 24 var x=id%10 25 this.putstone([y,x]) 26 setTimeout(this.randomput(),1000);//←該当の問題箇所 27 } 28 29} 30var x=new Board(8); 31x.check(24)
上記のようなコード(一部抜粋)を書いたのですが、これを実行すると下記のようなエラーが発生します
timers.js:121 throw new ERR_INVALID_CALLBACK(callback); ^ TypeError [ERR_INVALID_CALLBACK]: Callback must be a function. Received undefined
これはthis.randomput()が関数ではないよ、ということらしいのですがネットで情報を調べていたところかっこを外せばいいということらしいので(なぜカッコを外すと別の何かになるのかも知りたいですが)おそらく関数の戻り値をそのままsetTimeoutに入れてしまってるんだろうな、と想像しながら下記のようにコードを変えてみました。
javascript
1setTimeout(this.randomput,1000);
すると今度は
var arr=this.searchavailavle(); ^ TypeError: this.searchavailavle is not a function
のように出てきてしまいました。
関数の中で関数を呼び出しているだけなのになぜこのようなエラーがおこるのでしょうか?
ちなみに、setTimeoutで括らないと普通に即時実行されます。
2日くらいこの問題に向き合ってますが一向に解決できません。
お助けのほどよろしくお願い申し上げます。