ここでw3schoolsの関連ページやその他の同様の質問を読みましたが、次のビットの何が問題になっているのか理解できません。
_var myfunc03 = function (i) {
document.getElementById('d01').innerHTML += 100-i+"<br>";
};
var myFunc01 = function() {
i=0;
while (i<100) {
setTimeout(myfunc03(i), 1000)
i++;
}
};
_
myFunc01();
が実行されたとき。
一時停止は一切なく、iに可能なすべての値が一度にリストされます。
ここに論理的な間違いはありますか?
あなたはそれを行うことができますもっと簡単にrecursionで:
var i = 0;
function f1() { ... };
function f() {
f1();
i += 1;
setTimeout(function() {
if(i < 100) {
f();
}
}, 1000);
}
f();
var i = 0;
var myfunc03 = function(i) {
document.getElementById('d01').innerHTML += 100 - i + "<br>";
};
var myFunc01 = function() {
myfunc03(i);
i += 1;
setTimeout(function() {
if (i < 100) {
myFunc01();
}
}, 1000);
}
myFunc01();
<div id="d01"></div>
function say(sentence) {
console.log(sentence);
}
function sayHello() {
say("Hello!");
}
var fn = sayHello;
var count = 10;
var ms = 1000;
function repeat(fn, count, ms) {
var i = 0;
function f() {
fn();
i += 1;
setTimeout(function() {
if (i < count) {
f();
}
}, ms);
}
f();
}
repeat(fn, count, ms);
はい。コードには2つの問題があります。
myfunc03(i)
は何も返しませんサンプルコード:
var myfunc03 = function (i) {
setTimeout(function() {
document.getElementById('d01').innerHTML += 100-i+"<br>";
if (i < 100) {
i++;
myfunc03(i);
}
}, 1000);
};
var myFunc01 = function() {
myfunc03(0);
};
myFunc01();
<div id="d01"></div>
SetTimeoutにセミコロンがないため、以下の方法で引数を渡してみてください。
setTimeout(myfunc03, 1000*i, i);
while
待機中setTimeout
:
(async () => {
var i = 0;
while (await new Promise(resolve => setTimeout(() => resolve(i++), 1000)) < 100) {
console.log("I get printed 100 times every second");
}
})();