é å»¶ãã³ã¬ã¼ã¿
f ã®åå¼ã³åºãæ¯ã« ms ããªç§é
å»¶ããããã³ã¬ã¼ã¿ delay(f, ms) ã使ãã¦ãã ããã
ä¾:
function f(x) {
alert(x);
}
// ã©ããã¼ã使
let f1000 = delay(f, 1000);
let f1500 = delay(f, 1500);
f1000("test"); // "test" 㯠1000ms å¾ã«è¡¨ç¤º
f1500("test"); // "test" 㯠1500ms å¾ã«è¡¨ç¤º
ã¤ã¾ããdelay(f, ms) âms é
å»¶ããâ f ã®ããªã¢ã³ããè¿ãã¾ãã
ä¸ã®ã³ã¼ãã«ããã¦ãf ã¯åä¸å¼æ°ã®é¢æ°ã§ãããããªãã®è§£çã¯ãã¹ã¦ã®å¼æ°ã¨ã³ã³ããã¹ã this ãæ¸¡ãããã«ãã¦ãã ããã
è§£ç:
function delay(f, ms) {
return function() {
setTimeout(() => f.apply(this, arguments), ms);
};
}
ããã§ãã¢ãã¼é¢æ°ãã©ã使ããã¦ãããæ³¨æãã¦ãã ããããåç¥ã®éããã¢ãã¼é¢æ°ã¯ç¬èªã® this ã arguments ãæã¡ã¾ããããªã®ã§ãf.apply(this, arguments) ã¯ã©ããã¼ãã this 㨠arguments ãåãã¾ãã
ãããé常ã®é¢æ°ã渡ãå ´åãsetTimeout ã¯ããã弿°ãªãã§ã this=window (ãã©ã¦ã¶ã®å ´å) ã§å¼ã³åºãã¾ãããªã®ã§ãã©ããã¼ããããããæ¸¡ãããã«ã³ã¼ããæ¸ãå¿
è¦ãããã¾ãã:
function delay(f, ms) {
// setTimeout ã®ä¸ã§ãã©ããã¼ãã this ã¨ å¼æ°ã渡ãããã®å¤æ°ã追å
return function(...args) {
let savedThis = this;
setTimeout(function() {
f.apply(savedThis, args);
}, ms);
};
}
function delay(f, ms) {
return function() {
setTimeout(() => f.apply(this, arguments), ms);
};
};
ãµã³ãããã¯ã¹ã§ãã¹ãã¨ä¸ç·ã«è§£çãéã