[TIL] 210915 ė°ļęģ
íīëĄė ë íĻėė ę·ļ íĻėę° ė ėļë ëđėė LexicalEnvironmentė ėíļęīęģė ë°ëĨļ íėė ë§íëĪ.
ëĪëĨļ ë§ëĄë, ėīëĪ íĻėėė ė ėļí ëģėëĨž ė°ļėĄ°íë ëīëķ íĻėėėë§ ë°ėíë íėėīëžęģ í ė ėëĪ.
ėīíīíęļ° ėīë ĩęļ° ëëŽļė ėĪëŠ ė ë§ëķėīėëĐī ëĪėęģž ę°ëĪ.
var outer = function () {
var a = 1;
var inner = function () {
console.log(++a);
};
return inner();
};
var outer2 = outer();
consol.elog(outer2);
ė ėė ë ėžë°ė ėļ íĻė ë° ëīëķ íĻė
ėėė ëėė ëģīėŽėĪëĪ.
ėžë°ė ėžëĄ outer ėĪí ėŧĻí
ėĪíļę° ėĒ
ëĢëëĐī LexicalEnvironmentė ė ėĨë ėëģėëĪ(a, inner)ė ëí ė°ļėĄ°ëĨž ė§ėīëĪ.
ę·ļëŽëĐī ę° ėĢžėė ė ėĨëėī ėë ë°ėīí° ėėė ę°ëĪė ėė ė ė°ļėĄ°íë ëģėę° íëë ėęē ëëŊëĄ ę°ëđė§ ėŧŽë í°ė ėė§ ëėėī ëëĪ.
ėī ęē―ė° outer íĻėė ėĪí ėŧĻí
ėĪíļę° ėĒ
ëĢëęļ° ė ė inner íĻėė ėŧĻí
ėĪíļę° ėĒ
ëĢëęģ , ėīíė ëģëëĄ inner íĻėëĨž íļėķí ėë ėëĪ.
var outer = function () {
var a = 1;
var inner = function () {
return ++a;
};
return inner;
};
var outer2 = outer();
console.log(outer2());
console.log(outer2());
ë°ëĐīė, ė ėė ë ëíė ėļ íīëĄė
ė ėėėīëĪ.
ėī ęē―ė° outer íĻėę° inner íĻėëĨž ë°ííęģ ėęļ° ëëŽļė outer íĻėė ėĪí ėŧĻí
ėĪíļę° ėĒ
ëĢë íėë inner íĻėëĨž íļėķí ė ėëĪ.
outer2()ė ėíī inner íĻėę° íļėķëëë° inner íĻėë ëģė aė ę°ė ė°ļėĄ°íęģ ėëĪ.
LexicalEnvironmentė environmentRecordė outerEnvironmentReferenceė ėíī ëģėė ė íĻëēėėļ ėĪė―íę° ęē°ė ëęģ ėĪė―í ėēīėļėī ę°ëĨíīė§ëĪ.
ę·ļë°ë° inner íĻėė ėĪí ėŧĻí
ėĪíļė environmentRecordėėë ëģė aëĨž ė°ūė ė ėėžëŊëĄ outerEnvironmentReferenceėė ė°ūėėž íëĪ.
inner íĻėė ėĪí ėŧĻí
ėĪíļė outerEnvironmentReferenceėë inner íĻėę° ė ėļë ëđėė LexicalEnvironmentėļ outer íĻėė ėĪí ėŧĻí
ėĪíļė LexicalEnvironmentę° ëīęļīëĪ.
ėĪė―í ėēīėīëė ë°ëž outer íĻėėė ė ėļí ëģė aė ė ę·ží ė ėęē ëėī console ė°―ėë ę°ę° 2ė 3ėīëžë ę°ėī ėķë ĨëëĪ.
ę·ļë°ë° inner íĻėė ėĪí ėė ėë outer íĻėë ėīëŊļ ėĪíėī ėĒ
ëĢë ėíėėë ėīëŧęē outer íĻėė LexicalEnvironmentė ė ę·ží ė ėë ęąļęđ?
ėīë ėīëĪ ę°ė ė°ļėĄ°íë ëģėę° íëëžë ėëĪëĐī ę·ļ ę°ė ėė§ ëėė íŽíĻėíĪė§ ėë ę°ëđė§ ėŧŽë í°ė ëė ë°Đė
ëëŽļėīëĪ.
ėĶ, ė ėė ė ęē―ė° inner íĻėę° ėļëķëĄ ė ëŽëėī(outer2 ëģėëĄ ė ëŽ) ėļė ë outer2()ė ėíī inner íĻėę° íļėķë ėŽė§ę° ėë ėíĐėė inner íĻėë ëģė aëĨž ė°ļėĄ°íęģ ėęļ° ëëŽļė inner íĻėëĨž return íëĐīė outer íĻėė ėĪí ėŧĻí
ėĪíļę° ėĒ
ëĢëėėėë ëģė aę° ę°ëđė§ ėŧŽë í
ëė§ ėë ęēėīëĪ.
ėīëĨž ë°íėžëĄ íīëĄė ė ė ėëĨž ëĪė ė―ęē íėīė°ëĐī ëĪėęģž ę°ëĪ.
íīëĄė ë ėļëķ íĻėė ė§ėëģėëĨž ė°ļėĄ°íë ëīëķ íĻėę° ėļëķëĄ ė ëŽë ęē―ė°, ėļëķ íĻėė ėĪí ėŧĻí ėĪíļę° ėĒ ëĢë ėīíėë ėļëķ íĻėė ëģė aę° ėŽëžė§ė§ ėë(ę°ëđė§ ėŧŽë í ëė§ ėë) íėė ë§íëĪ. (ėīë, ėļëķ íĻė â ėļëķ)ė ėė ëĨž ëđëėī ëĪėęģž ę°ėī ėĪëŠ í ė ėëĪ.
íīëĄė ëėļëķ íĻė(outer)ė ė§ėëģė(a)ëĨž ė°ļėĄ°íë ëīëķ íĻė(inner)ę° ėļëķëĄ ė ëŽ(return inner â outer2 ëģėė í ëđ)ë ęē―ė°, ėļëķ íĻėė ėĪí ėŧĻí ėĪíļę° ėĒ ëĢë ėīíėë(inner íĻėëĨž return íëĐ° ėĒ ëĢ) ėļëķ íĻėė ëģė aę° ėŽëžė§ė§ ėë íė
ė ë§íëĪ.
ííļ, ëīëķ íĻėëĨž return
íë ęē ėļėë ëīëķ íĻėëĨž ė―ë°ą íĻėëĄ ėŽėĐ
íėŽ ėļëķė ė ëŽí ėë ėëĪ.
ëīëķ íĻėëĨž ė―ë°ą íĻėëĄ ėŽėĐíëĐīė ėļëķëĄ ė ëŽíë ëíė ėļ ėëĄë setInterval/setTimeoutęģž addEventListenerëĨž ëĪ ė ėëĪ.
ėī ęē―ė° returnėī ėėīë íīëĄė ę° ë°ėíëĪ.
// setInterval
(function () {
var a = 0;
var intervalId = null;
var inner = function () {
if (++a >= 10) {
clearInterval(intervalId);
}
console.log(a);
};
intervalId = setInterval(inner, 1000);
})();
setInterval íĻėę° ėĪíëĻė ë°ëž (ėĶė ėĪí íĻėëĄ ííë) ėĩëŠ
íĻėė ėĪíėī ėëĢëėī ėĩëŠ
íĻėė ėĪí ėŧĻí
ėĪíļę° ėĒ
ëĢëëĪ.
ę·ļëŽë, ėĩëŠ
íĻėėė ė ėļë ëģė aëĨž ė°ļėĄ°íë inner íĻėę° setInterval íĻėė ė―ë°ą íĻėëĄ ė ëŽëėī 1ėīë§ëĪ íļėķëęļ° ëëŽļė
ëđëĄ (ėĶė ėĪí íĻėëĄ ííë) ėĩëŠ
íĻėė ėĪí ėŧĻí
ėĪíļę° ėĒ
ëĢëėëëžë (ęģėíīė íļėķėī ë inner íĻėëĨž ėíī) ëģė aë ėŽëžė§ė§ ėëëĪ.
// addEventListener
(function () {
var count = 0;
var button = document.createElement("button");
button.innerText = "click";
button.addEventListener("click", function () {
console.log(++count, "times clicked");
});
document.body.appendChild(button);
})
buttonė bodyė ë§ė§ë§ ėė ėėëĄ ėķę°íëĐīė (ėĶė ėĪí íĻėëĄ ííë) ėĩëŠ
íĻėė ėĪíėī ėëĢëėī ėĩëŠ
íĻėė ėĪí ėŧĻí
ėĪíļę° ėĒ
ëĢëëĪ.
ę·ļëŽë, ėĩëŠ
íĻėėė ė ėļë ëģė countëĨž ė°ļėĄ°íë (ėīëēĪíļ ëĶŽėĪë) ėĩëŠ
íĻėę° addEventListenerė ė―ë°ą íĻėëĄ ė ëŽëėī ëēížėī íīëĶë ëë§ëĪ íļėķë ęēėīęļ° ëëŽļė
ëđëĄ (ėĶė ėĪí íĻėëĄ ííë) ėĩëŠ
íĻėė ėĪí ėŧĻí
ėĪíļę° ėĒ
ëĢëėëëžë (ëēížėī íīëĶë ëë§ëĪ ęģėíīė íļėķėī ë ėīëēĪíļ ëĶŽėĪë ėĩëŠ
íĻėëĨž ėíī) ëģė countë ėŽëžė§ė§ ėëëĪ.
íīëĄė ë ėëė ėžëĄ íĻėė ė§ė ëģėëĨž ëĐëŠĻëĶŽëĨž ėëŠĻíëëĄ íĻėžëĄėĻ ë°ėíëĪ.
ë°ëžė, ëĐëŠĻëĶŽëĨž íĻėĻė ėžëĄ ęīëĶŽíęļ° ėíīėë ę·ļ íėėąėī ėŽëžė§ ėė ėë ëë ëĐëŠĻëĶŽëĨž ėëŠĻíė§ ėëëĄ íīėž íëĪ.
ė°ļėĄ° ėđīėīíļëĨž 0ėžëĄ ë§ëĪëĐī
, ę°ëđė§ ėŧŽí
í°(GC)ė ėęą° ëėėī ëęģ , GCę° ėęą°íīę°ëĐī ėëŠĻëë ëĐëŠĻëĶŽę° íėëëĪ.
ė°ļėĄ° ėđīėīíļëĨž 0ėžëĄ ë§ëĪęļ° ėíīėë ėëģėė ė°ļėĄ°íėī ėë ęļ°ëģļí ë°ėīí°(null ëë undefined)ëĨž í ëđ
íīėž íëĪ.
ėīëēĪíļ ëĶŽėĪë íĻėëĨž ėëĄ ëĪėëĪ.
ë°Đëē 1: ė―ë°ą íĻėëĨž ëīëķ íĻėëĄ ė ėļíīė ėļëķ ëģėëĨž ė§ė ė°ļėĄ°íęļ°
ėīëēĪíļ ëĶŽėĪë ėėė ė―ë°ą íĻėëĨž 'ė ėļ'íëĐīė ę·ļ ėėė ėļëķ ëģėëĨž ė§ė ė°ļėĄ°íëëĄ íëĪ.
íīëĄė ëĨž ėīėĐí ë°ĐëēėīëĪ.
var fruits = ["apple", "banana", "peach"];
var $ul = document.createElement("ul");
fruits.forEach(function (fruit) {
var $li = document.createElement("li");
$li.innerText = fruit;
$li.addEventListener("click", function () { // ė―ë°ą íĻėëĨž ëīëķ íĻėëĄ ė ėļ
alert("your choice is " + fruit); // ėļëķ ëģė fruit ė§ė ė°ļėĄ°
});
$ul.appendChild($li);
});
document.body.appendChild($ul);
ë°Đëē 2: bind ëĐėëëĄ ę°ė ė§ė ëęēĻėĢžęļ°
ė ėė ėė ë°ëģĩė ėĪėīęļ° ėíī ė―ë°ą íĻė(ėīëēĪíļ ëĶŽėĪë íĻė)ëĨž ėļëķëĄ ëķëĶŽí í ėīëēĪíļ ëĶŽėĪë íĻėëĄ ëąëĄí ë bind ëĐėëëĨž ėŽėĐíëĪ.
(bind ëĐėëëĨž ėŽėĐíė§ ėėžëĐī alertFruit íĻėėė ėļėëĄ ëęēĻėĪ fruitë ėīëēĪíļ ę°ėēīę° ëëĪ.)
ėī ë°Đëēė ėŽėĐíëĐī ëŊļëĶŽ bind ëĐėëëĄ ę°ė ė§ė ëęēĻėĢžęļ° ëëŽļė íīëĄė ë ë°ėíė§ ėëëĪ.
ę·ļëŽë, bind ëĐėëëĨž ėŽėĐíëĐī bind ëĐėëė ėēŦ ëēė§ļ ėļėë ëŽīėĄ°ęąī ėëĄ ë°ėļëĐí this ę°ėīęģ ėī ę°ė ėëĩí ė ėęļ° ëëŽļė ėëė thisëĨž ė ė§í ė ėė ëŋ ėëëž
ėëë ėīëēĪíļ ëĶŽėĪë íĻėėė ėēŦ ëēė§ļ ėļėëĄ ėĪë ėīëēĪíļ ę°ėēīę° bind ëĐėëė ėíī ë ëēė§ļ ėļėę° ëë ė ė ę°ėíīėž íëĪ.
...
var alertFruit = function (fruit) {
alert("your choice is " + fruit);
};
fruits.forEach(function (fruit) {
var $li = document.createElement("li");
$li.innerText = fruit; // ėŽęļ° fruitëĨž
$li.addEventListener("click", alertFruit.bind(null, fruit)); // alertFruitė ėēŦ ëēė§ļ ėļėëĄ ëęēĻėĪ
$ul.appendChild($li);
});
...
ë°Đëē 3: ęģ ė°Ļ íĻė íėĐíęļ°
ęģ ė°Ļ íĻėë íĻėëĨž ėļėëĄ ë°ęą°ë 'íĻėëĨž return' íë íĻė
ëĨž ë§íëĪ.
ėī ëí $lię° íīëĶëė ë fruit ëģėė ę°ė ėīëŊļ ėĒ
ëĢë forEach ėĪí ėŧĻí
ėĪíļėė ė°ūėėž íëŊëĄ íīëĄė ëĨž ė ę·đė ėžëĄ íėĐí ë°ĐëēėīëĪ.
bind ëĐėëëĨž ėīėĐí ë°Đëēęģžë ëŽëĶŽ, ė―ë°ą íĻė(ėīëēĪíļ ëĶŽėĪë íĻė) ëīëķė thisė ę·ļ ėēŦ ëēė§ļ ėļė(ėīëēĪíļ ę°ėēī)ë ëģęē―íë ėž ėėī ėļëķ ëģėëĨž ė°ļėĄ°í ė ėëëĄ íëĪ.
var alertFruitBuilder = function (fruit) {
return function () { // ėīëēĪíļ ëĶŽėĪë íĻėė ėēŦ ëēė§ļ ėļėëĄë ėëëëĄ ėīëēĪíļ ę°ėēīę° ėĪęē ëëĪ
alert("your choice is " + fruit);
};
}
fruits.forEach(function (fruit) {
var $li = document.createElement("li");
$li.innerText = fruit;
$li.addEventListener("click", alertFruitBuilder(fruit));
$ul.appendChild($li);
});
ė ëģī ėëėīë ėīëĪ ëŠĻëė ëīëķ ëĄė§ė ëíī ėļëķëĄė ë
ļėķė ėĩėííë ęēė ë§íëĪ.
ėë°ėĪíŽëĶ―íļë ęļ°ëģļė ėžëĄ ëģė ėėēīė ė ę·ž ęķíė ė§ė ëķėŽíëëĄ ėĪęģëėī ėė§ë ėëĪ.
ę·ļëŽë, íīëĄė ëĨž íėĐíëĐī íĻė ė°Ļėėė, publicí ę°ęģž privateí ę°ė ęĩŽëķ
í ė ėëĪ.
ėīëĨž ėíī ę°ėēīę° ėë 'íĻė'ėė ė§ėëģė ë° ëīëķ íĻė ëąė ėėąí í
ëīëķėėë§ ėŽėĐí ė ëģīëĪė return íė§ ėęģ , ėļëķė ė ęģĩíęģ ė íë ė ëģīëĪë§ ëŠĻėė return
íëëĄ íëĪ.
ėļëķė ė ęģĩíęģ ė íë ëėėī ėŽëŋėž ëë 'ę°ėēī ëë ë°°ėī', íëėž ëë 'íĻė'ëĨž return íëĪ.
ėīë return íė§ ėė ëėėë ëđė°í ė ę·ží ė ėė§ë§ return í ëėë ëĪëĨļ ëīėĐėžëĄ ëŪėīėė°ęļ°ëĨž í ė ėęļ° ëëŽļė ę°ėēīëĨž return íęļ° ė ė ëŊļëĶŽ ëģęē―í ė ėëëĄ Object.freeze()
ëĨž ėīėĐíīėž íëĪ.
var createCar = function () {
// ė ę·ž ęķí x
var fuel = ...
var power = ...
var moved = ...
// ė ę·ž ęķí o
var publicMembers = {
get moved () { // ė―ęļ° ė ėĐ ėėą
return moved;
}
run: function () {
...
}
};
Object.freeze(publicMembers);
return publicMembers;
};
var car = createCar();
ëķëķ ė ėĐ íĻėë nę°ė ėļėëĨž ë°ë íĻėė ëŊļëĶŽ mę°ė ėļėë§ ëęēĻ ęļ°ėĩėėž°ëĪę°, ëėĪė (n-m) ę°ė ėļėëĨž ëęēĻ ëđëĄė ėë íĻėė ėĪí ęē°ęģžëĨž ėŧė ė ėëëĄ íë íĻėėīëĪ.
ë°Đëē 1: bind ëĐėë
var add = function () {
var result = 0;
for (var i = 0; i < arguments.length; i++) {
result += arguments[i];
}
return result;
};
var addPartial = add.bind(null, 1, 2, 3, 4, 5);
console.log(6, 7, 8, 9, 10); // 55
ę·ļëŽë, bind ëĐėëëĨž ėŽėĐíëĐī ėė ėīíīëģļ ęēėēëž thisëĨž ëŽīėĄ°ęąī ëģęē―íīėž íęļ° ëëŽļė ëĐėëėėë ėŽėĐí ė ėëĪë ëŽļė ę° ėëĪ.
ë°Đëē 2: ëķëķ ė ėĐ íĻė ęĩŽí
var partial = function () {
var originalPartialArgs = arguments;
var func = originalPartialArgs[0];
if (typeof fun !== "function") {
throw new Error("ėēŦ ëēė§ļ ėļėę° íĻėę° ėëëëĪ.");
}
return function () {
var partialArgs = Array.prototype.slice.call(originalPartialArgs, 1);
var restArgs = Array.prototype.slice.call(arguments);
return func.apply(this, partialArgs.concat(restArgs));
}
}
var add = function () {
var result = 0;
for (var i = 0; i < arguments.length; i++) {
result += arguments[i];
}
return result;
};
const addPartial = partial(add, 1, 2, 3, 4, 5);
console.log(addPartial(6, 7, 8, 9, 10)); // 55
var dog = {
name: "ę°ėė§",
greet: partial(function(prefix, suffix) {
return prefix + this.name + suffix;
}, "ėė, "),
};
console.log(dog.greet("ė
ëëĪ!")); // ėė, ę°ėė§ė
ëëĪ!
ëĪë§, ėīë ëķëķ ė ėĐ íĻėė ëęļļ ėļėëĨž ë°ëė ėėėëķí° ė°ĻëĄëĄ ė ëŽí ėë°ė ėëĪ.
ë°Đëē 3: ëķëķ ė ėĐ íĻė ęĩŽí (ėė )
ėēėė ëęēĻėĪ ėļėëĪ ėĪ _ëĄ ëđėëė ęģĩę°ë§ëĪ ëėĪė ëėīėĻ ėļėëĪėī ė°ĻëĄëëĄ ëžėëĢëëĄ ęĩŽíí ė ėëĪ.
â ë°Đëē 2ė ë°Đëē 3ė ëŊļëĶŽ ėžëķ ėļėëĨž ëęēĻëėī ęļ°ėĩíęēë íęģ , ėķí íėí ėė ė ęļ°ėĩíë ėļėëĪęđė§ íĻęŧ ėĪííëëĄ íëĪ
ë ė ėė íīëĄė ëĨž íĩėŽ ęļ°ëēėžëĄ ėŽėĐíëĪęģ í ė ėëĪ.
ëë°ėīėĪ
ëë°ėīėĪë ė§§ė ėę° ëė ëėží ėīëēĪíļę° ë§ėī ë°ėí ęē―ė°
ėīëĨž ė ëķ ėēëĶŽíė§ ėęģ ėēė ëë ë§ė§ë§ė ë°ėí ėīëēĪíļė ëíīė í ëēë§ ėēëĶŽ
íë ęēė ë§íëĪ.
var debounce = function (eventName, func, wait) {
var timeoutId = null;
return function (event) { // 2-1. ėŽęļ°ė eventë ėīëēĪíļ ę°ėēī
var self = this; // 1-1. ėŽęļ°ė thisë ė―ë°ą íĻėė ëí ė ėīęķė ę°ė§ë addEventListener ëĐėëė ėíī bodyę° ëëĪ
console.log(eventName, "event ë°ė");
clearTimeout(timeoutId);
timeoutId = setTimeout(func.bind(self, event), wait);
// 1-2. ę·ļ bodyëĨž func íĻė ëīëķė thisëĄ ë°ėļëĐíëĪ.
// 2-2. ę·ļ ėīëēĪíļ ę°ėēīëĨž funcė ėēŦ ëēė§ļ ėļėëĄ ė íīėĪëĪ.
};
};
var moveHandler = function (e) { // 2-3. ėŽęļ°ė eë ėīëēĪíļ ę°ėēīę° ëëĪ.
console.log("move event ėēëĶŽ");
};
var wheelHandler = function (e) {
console.log("wheel evnet ėēëĶŽ");
};
document.body.addEventListener("mousemove", debounce("move", moveHandler, 500));
document.body.addEventListener("mousewheel", debounce("wheel", wheelHandler, 700));
ė ė―ëė ęē°ęģž, ë§ė°ėĪëĨž ëđ ëĨīęē ęģė ėė§ėīëĐī 'mouse event ë°ė' ėīëžë ëŽļęĩŽë ęģė ëĻė§ë§, 'mouse event ėēëĶŽ' ëžë ëŽļęĩŽë ë§ė°ėĪ ėė§ėė ëĐė·ė ë ë§ė§ë§ í ëēë§ ëŽëĪ.
setTimeoutė ė―ë°ą íĻė(ėĶ, mouseHandler)ę° ėĪíëęļ° ė ė(ë§ė°ėĪ ėīëēĪíļę° ë°ėíęģ 0.5ėīę° ė§ëęļ° ė ė) ëĪëĨļ ë§ė°ėĪ ėīëēĪíļę° ë ë°ėíīė ėīė ė ėĪíë setTimeout íĻėę° clearTimeoutė ėíī ė·Ļėëėęļ° ëëŽļėīëĪ.
ė°ļęģ ëĄ ėŽęļ°ė íīëĄė ëĄ ėēëĶŽëë ëģėėë eventName, func, wait, timeoutIdę° ėëĪ.
ėŧĪë§ íĻėë ėŽëŽ ę°ė ėļėëĨž ë°ë íĻėëĨž íëė ėļėë§ ë°ë íĻėëĄ ëë ė ėė°Ļė ėžëĄ íļėķë ė ėęē ėēīėļ ííëĄ ęĩŽėą
í ęēė ë§íëĪ.
ëķëķ ė ėĐ íĻė vs ėŧĪë§ íĻė
ëķëķ ė ėĐ íĻėë ėŽëŽ ę°ė ėļėëĨž ė ëŽí ė ėė§ë§, ėŧĪë§ íĻėë í ëēė íëė ėļėë§ ė ëŽíëĪ.
ëķëķ ė ėĐ íĻėë ėĪí ęē°ęģžëĨž ėŽėĪíí ëë§ëĪ ėëģļ íĻėę° ëŽīėĄ°ęąī ėĪíëė§ë§, ėŧĪë§ íĻėë ë§ė§ë§ ėļėę° ė ëŽëęļ° ė ęđė§ë ėëģļ íĻėę° ėĪíëė§ ėëëĪ.
var curry3 = function (func) {
return function (a) {
return function (b) {
return func(a, b);
};
};
};
var getMaxWith10 = curry3(Math.max)(10);
console.log(getMaxWith10(8)); // 10
console.log(getMaxWith10(25)); // 25
// ES6
var curry3 = func => a => b => func(a, b);
// curry3ė funcëĨž ėļėëĄ ę°ė§ë íĻėėīëĪ
// funcëĨž ėļėëĄ ę°ė§ë íĻėë aëĨž ėļėëĄ ę°ė§ë íĻėëĨž return íëĪ
// aëĨž ėļėëĄ ę°ė§ë íĻėë bëĨž ėļėëĄ ę°ė§ë íĻėëĨž return íëĪ
// bëĨž ėļėëĄ ę°ė§ë íĻėë func(a, b)ëĨž ėĪíí ę°ė return íëĪ
ę° ëĻęģėė ë°ė ėļėëĪė ëŠĻë ë§ė§ë§ ëĻęģėė ė°ļėĄ°í ęēėīëŊëĄ ę°ëđė§ ėŧŽë í ëė§ ėęģ ëĐëŠĻëĶŽė ė°ĻęģĄė°ĻęģĄ ėėëĪę°, ë§ė§ë§ íļėķëĄ ėĪí ėŧĻí ėĪíļę° ėĒ ëĢë íėėž ëđëĄė íęšžëēė ę°ëđė§ ėŧŽë í ëëĪ.
ë°ëžė, íĻėëĨž ėíë ėė ęđė§ ė§ė°ėėž°ëĪę° ėĪí
ėíŽ íėę° ėë ęē―ė° ėŧĪë§ íĻėëĨž ėŽėĐí ė ėëĪ.
íđė íĻėė ë§Īę°ëģėę° íė ëđė·íęģ ėžëķë§ ë°ëë ęē―ė°
ėë ėŧĪë§ íĻėëĨž ė ėĐíęē ėŽėĐí ė ėëĪ.
íđí fetch íĻėę° urlė ë°ė íīëđ urlė HTTP ėėēė í ë ėĢžëĄ ėŽėĐëëĪ.
var getInformation = baseUrl => path => id => fetch(baseUrl + path + "/" + id);
var imageUrl = "http://imageAddress.com";
var getImage = getInformation(imageUrl); // baseUrl ëĢė
var getEmoticon = getImage("emoticon"); // path ëĢė
var emoticon = getEmoticon(100); // ėĪė ėėē