ė―ë°ą íĻėë ëĪëĨļ ė―ëė ėļėëĄ ëęēĻėĢžë íĻėëĨž ë§íëĪ.
var count = 0;
var cbFunc = function () {
console.log(count);
if (++count > 4) clearInterval(timer);
};
var timer = setInterval(cbFunc, 300);
ė―ë°ą íĻė(cbFunc)ė ė ėīęķė ëęēĻë°ė íĻė(setInterval)ë ė―ë°ą íĻė íļėķ ėė ė ëí ė ėīęķė ę°ė§ëĪ.
â setInterval íĻėę° 0.3ėī ëĪ cbFunc íĻė íļėķ
ė―ë°ą íĻėëĨž íļėķíë ėĢžėēīë ėŽėĐėę° ėëëž ę·ļ ė―ë°ą íĻėė ė ėīęķė ëęēĻë°ė íĻėėīëĪ.
ë°ëžė, ė―ë°ą íĻėëĨž íļėķí ë ėļėė ėīëĪ ę°ëĪė ėīëĪ ėėëĄ ëęļļ ęēėļę°ë ė ė ėžëĄ ę·ļ ė―ë°ą íĻėė ė ėīęķė ëęēĻë°ė íĻėėęē ëŽëĶ° ęēėīëŊëĄ ėŽėĐėę° ėėëĄ ëģęē―í ė ėëĪ.
ė―ë°ą íĻėë íĻėėīęļ° ëëŽļė ęļ°ëģļė ėžëĄë thisę° ė ė ę°ėēīëĨž ė°ļėĄ°íė§ë§, ė ėīęķė ëęēĻë°ė ė―ëėė ė―ë°ą íĻėė ëģëëĄ thisę° ë ëėė ė§ė í ęē―ė°ėë, ę·ļ ëėė ė°ļėĄ°íęē ëëĪ.
íėė ęē―ė°, ė―ë°ą íĻėė ė ėīęķė ëęēĻë°ė ė―ëë 'ėėēīė ėžëĄ' call/apply ëĐėëė ėēŦ ëēė§ļ ėļėė ė―ë°ą íĻė ëīëķėėė thisę° ë ëėė ëŠ ėė ėžëĄ ë°ėļëĐíëĪ.
ėëĄėĻ map ëĐėëëĨž ę°ëĻí ęĩŽííëĐī ëĪėęģž ę°ëĪ.
map ëĐėë ėėēīė ėžëĄ call(thisArg || window)
ëĨž íĩíī thisArg ę°ėī ėė ęē―ė° thisëĨž ë°ėļëĐíęģ ėėė ė ė ėëĪ.
Array.prototype.map = function (callback, thisArg) {
var mappedArr = [];
for (var i = 0; i < this.length; i++) {
var mappedValue = callback.call(thisArg || window, this[i], i, this);
mappedArr[i] = mappedValue;
}
return mappedArr;
}
ëĪëĨļ ėëĄ addEventListenerë ė―ë°ą íĻėëĨž íļėķí ë ėė call ëĐėëė ėēŦ ëēė§ļ ėļėė addEventListener ëĐėëė thisëĨž ę·ļëëĄ ëęēĻėĢžëëĄ ėėēīė ėžëĄ ė ėëėī ėëĪ.
ė―ë°ą íĻėëĄ ėīëĪ ę°ėēīė ëĐėëëĨž ė ëŽíëëžë
ę·ļ ëĐėëë ëĐėëę° ėëëž íĻėëĄė íļėķëëĪ.
ėĶ, ė―ë°ą íĻėëĄ ę°ėēīė ëĐėëëĨž ė ëŽí ęē―ė°ëëžë ė―ë°ą íĻėė thisë
íīëđ ę°ėēīę° ėëëž ė ė ę°ėēīëĨž ę°ëĶŽíĪęē ëëĪ.
ę·ļëžėë ëķęĩŽíęģ ė―ë°ą íĻė ëīëķėė thisę° ė ė ę°ėēīę° ėëëž íīëđ ę°ėēīëĨž ę°ëĶŽíĪëëĄ íë ĪëĐī ėīëŧęē íīėž í ęđ?
mapėīë forEach ėēëž ëģëė ėļėëĄ thisëĨž ë°ë íĻėė ęē―ė°ėë ėŽęļ°ė ėíë ę°ė ëęēĻėĢžëĐī ëė§ë§, ę·ļë ė§ ėė ęē―ė°ėë ė―ë°ą íĻėė ė ėīęķė ëęēĻėĢžë íĻėė thisė ė ėīęķë íĻęŧ ëęēĻėĢžęē ëëŊëĄ ėŽėĐėę° ėėëĄ ę°ė ë°ęŋ ė ėėžëŊëĄ ëĪëĨļ ë°Đëēė ėŽėĐíīėž íëĪ.
ė―ë°ą íĻė ëīëķė thisė ëĪëĨļ ę°ė ë°ėļëĐíęļ° ėí 4ę°ė§ ë°Đëēėī ėëĪ.
ė íĩė ėžëĄë thisëĨž ëĪëĨļ ëģėė ëīė ė―ë°ą íĻėëĄ íėĐí íĻėėė this ëė ę·ļ ëģėëĨž ėŽėĐíëëĄ íëĪ.
var obj1 = {
name: "obj1".
func: function () {
var self = this; // thisëĨž ëĪëĨļ ëģėė í ëđ
return function () {
console.log(self.name); // ė―ë°ą íĻėėė ę·ļ ëģėëĨž ėŽėĐ
};
}
};
var callback = obj1.func();
setTimeout(callback, 1000);
var obj1 = {
name: "obj1",
func: function () {
console.log(obj1.name);
}
};
setTimeout(obj1.func, 1000);
(1)ëģīëĪ íĻėŽ ė§ęīė ėīęģ ę°ęē°íė§ë§, ėīë ęē ėėąíëĐī ę°ëĶŽíŽ ę°ėēīę° obj1ėžëĄ ęģ ė ėī ëėī ëĪėí ėíĐėė ėŽíėĐí ė ėëĪ.
var obj1 = {
name: "obj1",
func: function () {
var self = this; // 2. ėŽęļ°ė thisë obj2
return function () {
console.log(self.name); // obj2
};
}
};
var obj2 = {
name: "obj2",
func: obj1.func,
};
var callback2 = obj2.func(); // 1. ėŽęļ°ė func ëĐėë ëīëķėėė thisë obj2ėīëŊëĄ
setTimeout(callback2, 1500);
var obj3 = { name: "obj3" };
var callback3 = obj1.func.call(obj3); // call ëĐėëë íļėķ ėĢžėēī íĻė(obj1.func)ëĨž ėĶė ėĪí
setTimeout(callback3, 1500);
ëēęą°ëĄęļī íė§ë§ thisëĨž ė°íė ėžëĄëë§ íėĐíĻėžëĄėĻ ëĪėí ėíĐėė ėíë ę°ėēīëĨž ë°ëžëģīë ė―ë°ą íĻėëĨž ë§ëĪ ė ėëĪ.
bind ëĐėëë call ëĐėëė ëŽëĶŽ íļėķ ėĢžėēī íĻėëĨž ėĶė ėĪíėíĪė§ ėęģ ėëĄėī íĻėëĨž ë°ííęļ° ëëŽļė ęĩģėī obj1.funcėė setTimeoutė ė―ë°ą íĻėëĄ íėĐí íĻėëĨž ë°ëĄ return íīėĢžė§ ėėë ëëĪ.
var obj1 = {
name: "obj1",
func: function () {
console.log(this.name);
}
};
var obj2 = { name: "obj2" };
setTimeout(obj1.func.bind(obj2), 1500);
ė―ë°ą ė§ėĨėīë ė―ë°ą íĻėëĨž ėĩëŠ
íĻėëĄ ė ëŽíë ęģžė ėī ë°ëģĩ
ëėī ė―ëė ëĪėŽė°ęļ° ėėĪėī ę°ëđíęļ° íëĪ ė ëëĄ ęđėīė§ë íėė ë§íëĪ.
ėīë ėĢžëĄ ëđëęļ°ė ėļ ėė
ė ėíí ë ėėĢž ë°ėíë ëŽļė ėīëĪ.
ëđëęļ°ė ėļ ė―ëë íėŽ ėĪí ėĪėļ ė―ëė ėëĢ ėŽëķė ëŽīęīíęē ėĶė ëĪė ė―ëëĄ ëėīę°ë ė―ëëĨž ë§íëĪ.
ë°ëžė, ëđëęļ°ė ėļ ė―ëë (ėĪë đ ėė
ė ėëĢíë ë° ėę°ėī ë§ėī íėíëëžë) ėėēęģž ęē°ęģžę° ëėė ėžėīëë ëęļ°ė ėļ ė―ëė ëŽëĶŽ, ėėēęģž ęē°ęģžę° ëėė ėžėīëė§ ėëëĪ.
ëģëė ėėē(fetch, XMLHttpRequest), ėĪí ëęļ°(addEventListener), ëģīëĨ(setTimeout) ëąęģž ęīë Ļë ė―ëę° ëđëęļ°ė ėļ ė―ëėīëĪ.
ė―ë°ą ė§ėĨė íīęē°íë ę°ėĨ ę°ëĻí ë°Đëēė ėĩëŠ ė ė―ë°ą íĻėëĨž ęļ°ëŠ íĻėëĄ ė ííë ęēėīëĪ.
ëĪëĨļ ë°ĐëēėžëĄ ëđëęļ° ėė
ė ëęļ°ė ėžëĄ íđė ëęļ°ė ėļ ęēėēëž ëģīėīęēë
ėēëĶŽíīėĪ ėë ėëĪ.
ėīëĨž ėíī ES6ėė Promiseė Generatorę° ëė
ëėęģ , ES2017ėėë async/awaitėī ëė
ëėëĪ.
[TIL] 211012 (promise / async) / [TIL] 211013 (await) ė°ļęģ
Promise
new ė°ė°ėė íĻęŧ íļėķí Promiseė ėļėëĄ ëęēĻėĢžë ė―ë°ą íĻė(ėĪí íĻė)ë íļėķí ë ë°ëĄ ėĪíëė§ë§, ę·ļ ëīëķė resolve ëë reject íĻėëĨž íļėķíë ęĩŽëŽļėī ėė ęē―ė° ë ėĪ íëę° ėĪíëęļ° ė ęđė§ë ëĪė(then) ëë ėĪëĨ ęĩŽëŽļ(catch)ëĄ ëėīę°ė§ ėëëĪ.
ë°ëžė, ëđëęļ° ėė
ėī ėëĢë ë, ëđëĄė resolve ëë rejectëĨž íļėķ
íë ë°ĐëēėžëĄ ëđëęļ° ėė
ė ëęļ°ė ííėī ę°ëĨíëĪ.
Generator
ëđëęļ° ėė ėī ėëĢëë ėė ë§ëĪ next ëĐėëëĨž íļėķíĻėžëĄėĻ Generator íĻė ëīëķė ėėĪę° ėėėëķí° ėëëĄ ėė°Ļė ėžëĄ ė§íëëëĄ í ė ėëĪ.
Promise + Async/await
var addCoffee = function (name) {
return new Promise(function (resolve) {
setTimeout(function () {
resolve(name);
}, 500);
});
};
var coffeeMaker = async function () {
var coffeeList = "";
var _addCoffee = async function (name) {
coffeeList += (coffeeList ? "," : "") + await addCoffee(name);
};
await _addCoffee("ėėĪíë ė");
console.log(coffeeList);
await _addCoffee("ėëĐëĶŽėđīë
ļ");
console.log(coffeeList);
await _addCoffee("ėđīíëŠĻėđī");
console.log(coffeeList);
await _addCoffee("ėđīíëžëž");
console.log(coffeeList);
};
coffeeMaker();
ëđëęļ° ėė
ė ėííęģ ė íë íĻė ėė asyncëĨž íííęģ , íĻė ëīëķėė ėĪė§ė ėļ ëđëęļ° ėė
ėī íėí ėėđë§ëĪ awaitė íęļ°íëĪ.
Promiseę° awaitė ëęēĻė§ëĐī, awaitė Promiseę° fulfill ëęļ°ëĨž ęļ°ëĪë ļëĪę°, íīëđ ę°ė return íëĪ.
ėīëĨž íĩíī promiseė thenęģž íĄėŽí íĻęģžëĨž ėŧė ė ėëĪ.
coffeeMaker()
await _addCoffee("ėėĪíë ė")
await addCoffee("ėėĪíë ė")
0.5ėī ëĪė "ėėĪíë ė" ę°ė ëīė resolve íĻė íļėķ ( = promise ėí fullfilled)
_addCoffee íĻėė await addCoffee("ėėĪíë ė")ę° "ėėĪíë ė"ëĨž return