颿°
Baseline
åºãå©ç¨å¯è½
*
ãã®æ©è½ã¯åºãå®è£ ããã¦ãããå¤ãã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã©ã¦ã¶ã¼ã§åä½ãã¾ãã2015å¹´7æä»¥éããã¹ã¦ã®ãã©ã¦ã¶ã¼ã§å©ç¨å¯è½ã§ãã
* ãã®æ©è½ã®ä¸é¨ã¯ã対å¿ã¬ãã«ãç°ãªãå ´åãããã¾ãã
ä¸è¬çã«è¨ãã¨ã颿°ã¨ã¯å¤é¨ (å帰ã®å ´åã¯å é¨) ããå¼ã³åºããã¨ã®ã§ããããµãããã°ã©ã ãã§ããããã°ã©ã ãã®ãã®ã®ããã«ã颿°ã¯é¢æ°æ¬ä½ (function body) ã¨å¼ã°ããé£ç¶ããæã§æ§æããã¾ãã颿°ã«ã¯å¼æ°ã¨ãã¦å¤ã渡ããã¨ãã§ãã颿°ã¯å¤ãè¿ããã¨ãã§ãã¾ãã
JavaScript ã§ã颿°ã¯ç¬¬ä¸ç´ãªãã¸ã§ã¯ãã§ãã颿°ã¯ä»ã®é¢æ°ã«æ¸¡ãããã颿°ããè¿ãããã夿°ãããããã£ã«ä»£å ¥ãããã§ããããã§ããã¾ãããã以å¤ã®ãªãã¸ã§ã¯ãã¨åæ§ã«ããããã£ãã¡ã½ãããæã¤ãã¨ãã§ãã¾ããä»ã®ãªãã¸ã§ã¯ãã¨ç°ãªãç¹ã¯ã颿°ã¯å¼ã³åºããã¨ãããã¨ã§ãã
ãã詳細ãªä¾ã解説ã«ã¤ãã¦ã¯ãJavaScript ã®é¢æ°ã®ã¬ã¤ããåç §ãã¦ãã ããã
解説
颿°å¤ã¯é常ãFunction ã®ã¤ã³ã¹ã¿ã³ã¹ã§ãã Function ãªãã¸ã§ã¯ãã®ããããã£ã¨ã¡ã½ããã«é¢ããæ
å ±ã«ã¤ãã¦ã¯ã Function ãåç
§ãã¦ãã ãããå¼ã³åºãå¯è½ãªå¤ã§ãããããtypeof 㯠"object" ã§ã¯ãªã "function" ãè¿ãã¾ãã
ã¡ã¢:
å¼ã³åºãå¯è½ãªå¤ã®ãã¹ã¦ã instanceof Function ã§ããã¨ã¯éãã¾ãããä¾ãã°ãFunction.prototype ãªãã¸ã§ã¯ãã¯å¼ã³åºãå¯è½ã§ãããFunction ã®ã¤ã³ã¹ã¿ã³ã¹ã§ã¯ããã¾ãããã¾ãã颿°ã®ãããã¿ã¤ããã§ã¼ã³ãæåã§è¨å®ãã¦ãFunction.prototype ããã®ç¶æ¿ãããããã¨ãã§ãã¾ãããã ãããã®ãããªã±ã¼ã¹ã¯é常ã«ç¨ã§ãã
è¿å¤
æ¢å®ã§ã¯ã颿°ã®å®è¡ã return æã§çµãããªãå ´åãã¾ã㯠return ãã¼ã¯ã¼ãã®å¾ã«å¼ããªãå ´åãè¿å¤ã¯ undefined ã¨ãªãã¾ãã return æã使ç¨ããã¨ã颿°ããä»»æã®å¤ãè¿ããã¨ãã§ãã¾ãã 1 åã®é¢æ°å¼ã³åºãã§è¿ããå¤ã¯ 1 ã¤ã ãã§ããããªãã¸ã§ã¯ããé
åãè¿ãã¦çµæãæ§é åè§£ãããã¨ã§ãè¤æ°ã®å¤ãè¿ãå¹æãæ¨¡å£ãããã¨ãã§ãã¾ãã
ã¡ã¢:
new ã§å¼ã³åºãããã³ã³ã¹ãã©ã¯ã¿ã¼ã¯ãè¿å¤ã決å®ããããã®ä¸é£ã®ãã¸ãã¯ãç°ãªãã¾ãã
弿°ã®åãæ¸¡ã
仮弿° (parameter) ã¨å®å¼æ° (argument)ããããæå³ãè¥å¹²ç°ãªãã¾ããã MDN web docs ã§ã¯å¤ãã®å ´ååãæå³ã§ä½¿ç¨ããã¦ãã¾ããç°¡åã«è¨ãã¨ã
function formatNumber(num) {
return num.toFixed(2);
}
formatNumber(2);
ãã®ä¾ã§ã¯ã num 夿°ã¯é¢æ°ã®ã仮弿°ã (parameter) ã¨å¼ã°ãã颿°å®ç¾©ã®æ¬å¼§ã§å²ã¾ãããªã¹ãå
ã§å®£è¨ããã¾ãã颿°ã¯ num 仮弿°ãæ°å¤ã§ãããã¨ãæå¾
ãã¦ãã¾ãããã ãã JavaScript ã§ã¯å®è¡ææ¤è¨¼ã³ã¼ããæ¸ããªãéãããããå¼·å¶ãããã¨ã¯ã§ãã¾ããã formatNumber(2) ã®å¼ã³åºãã«ããã¦ãæ°å¤ 2 ã¯é¢æ°ã®ãå®å¼æ°ã (argument) ã§ããããã¯é¢æ°å¼ã³åºãæã«å®éã«æ¸¡ãããå¤ã§ãã å®å¼æ°ã®å¤ã¯ã颿°æ¬ä½å
ã§å¯¾å¿ãã弿°åã¾ã㯠arguments ãªãã¸ã§ã¯ããéãã¦ã¢ã¯ã»ã¹ã§ãã¾ãã
弿°ã¯å¸¸ã«å¤æ¸¡ãã§ãããæ±ºãã¦åç §æ¸¡ãã§ã¯ããã¾ãããããã¯ã颿°ã弿°ã«åä»£å ¥ãè¡ã£ã¦ãã颿°å¤ã§ã¯å¤ã夿´ãããªãã¨ãããã¨ã§ããããæ£ç¢ºã«ã¯ããªãã¸ã§ã¯ã弿°ã¯å ±ææ¸¡ãã§ããã¤ã¾ãããªãã¸ã§ã¯ãã®ããããã£ã夿´ãããå ´åããã®å¤æ´ã¯é¢æ°å¤ã«ãå½±é¿ããã¨ãããã¨ã§ããä¾ãã°ã
function updateBrand(obj) {
// ãªãã¸ã§ã¯ãã®å¤æ´ã¯é¢æ°å¤ãããè¦ãã
obj.brand = "Toyota";
// 仮弿°ã«å代å
¥ãã¦ã¿ã¦ãã颿°å¤ã§ã®å¤æ°ã®å¤ã«ã¯å½±é¿ããªã
obj = null;
}
const car = {
brand: "Honda",
model: "Accord",
year: 1998,
};
console.log(car.brand); // Honda
// ãªãã¸ã§ã¯ãåç
§ã颿°ã¸æ¸¡ã
updateBrand(car);
// updateBrand ã car ã夿´ãã
console.log(car.brand); // Toyota
this ãã¼ã¯ã¼ãã¯ã颿°ãã¢ã¯ã»ã¹ããããªãã¸ã§ã¯ããåç
§ãã¾ããç¾å¨å®è¡ä¸ã®é¢æ°ãåç
§ããã®ã§ã¯ãªãã颿°æ¬ä½å
ã§ãã£ã¦ã颿°å¤ã¯ååã§åç
§ããå¿
è¦ãããã¾ãã
颿°ã®å®ç¾©
大ã¾ãã«è¨ãã°ã JavaScript ã«ã¯ 4 種é¡ã®é¢æ°ãããã¾ãã
- é叏颿°: ä½ã§ãè¿ããã¨ãã§ãã¾ããå¼ã³åºãå¾ã常ã«å®äºããã¾ã§å®è¡ãã¾ãã
- ã¸ã§ãã¬ã¼ã¿ã¼é¢æ°:
Generatorãªãã¸ã§ã¯ããè¿ãã¾ããyieldæ¼ç®åã§ä¸æåæ¢ãåéãã§ãã¾ãã - éåæé¢æ°:
Promiseãè¿ãã¾ããawaitæ¼ç®åã§ä¸æåæ¢ãåéãã§ãã¾ãã - éåæã¸ã§ãã¬ã¼ã¿ã¼é¢æ°:
AsyncGeneratorãªãã¸ã§ã¯ããè¿ãã¾ããawaitã¨yieldã®ä¸¡æ¹ã®æ¼ç®åã使ç¨ã§ãã¾ãã
ã©ã®ç¨®é¡ã®é¢æ°ã§ãããããå®ç¾©ããæ¹æ³ã¯è¤æ°ããã¾ãã
- 宣è¨
- å¼
- ã³ã³ã¹ãã©ã¯ã¿ã¼
-
Function(),GeneratorFunction(),AsyncFunction(),AsyncGeneratorFunction()
ããã«ãã¢ãã¼é¢æ° 㨠ã¡ã½ãã ãå®ç¾©ããããã®ç¹å¥ãªæ§æãããããããã¯ãã®ç¨æ³ã«æç¢ºãªæå³ã¥ããæä¾ãã¾ããã¯ã©ã¹ã¯æ¦å¿µçã«ã¯é¢æ°ã§ã¯ããã¾ããï¼new ãªãã§å¼ã³åºãããã¨ã¨ã©ã¼ãçºçããããï¼ãããããããã㯠Function.prototype ãç¶æ¿ãã typeof MyClass === "function" ã¨ãªãã¾ãã
// ã³ã³ã¹ãã©ã¯ã¿ã¼
const multiply = new Function("x", "y", "return x * y");
// 宣è¨
function multiply(x, y) {
return x * y;
} // ããã§ã¯ã»ãã³ãã³ã¯å¿
é ã§ã¯ãªã
// å¼ï¼ãã®é¢æ°ã¯ç¡åã ãã夿°ã«ä»£å
¥ããã
const multiply = function (x, y) {
return x * y;
};
// å¼ï¼èªåã®ååãæã¤é¢æ°
const multiply = function funcName(x, y) {
return x * y;
};
// ã¢ãã¼é¢æ°
const multiply = (x, y) => x * y;
// ã¡ã½ãã
const obj = {
multiply(x, y) {
return x * y;
},
};
ãã¹ã¦ã®æ§æã¯ããããåããã¨ããã¾ãããå¾®å¦ãªåä½ã®éããããã¤ãããã¾ãã
Function()ã³ã³ã¹ãã©ã¯ã¿ã¼ãfunctionå¼ãããã³functionå®£è¨æ§æã¯ãæ£è¦ã®é¢æ°ãªãã¸ã§ã¯ããçæãã¾ãããããã¯newã使ç¨ãã¦æ§ç¯å¯è½ã§ãããã ããã¢ãã¼é¢æ°ã¨ã¡ã½ããã¯æ§ç¯ã§ãã¾ãããéåæé¢æ°ãã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ãããã³éåæã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ã¯ãæ§æã«é¢ãããæ§ç¯ã§ãã¾ãããfunction宣è¨ã¯ãå·»ãä¸ãããã颿°ã使ãã¾ãããã以å¤ã«ãæ§æã§ã¯é¢æ°ã¯å·»ãä¸ããããã颿°ã®å¤ã¯å®ç¾©å¾ã«ã®ã¿è¦ããããã«ãªãã¾ãã- ã¢ãã¼é¢æ°ã¨
Function()ã³ã³ã¹ãã©ã¯ã¿ã¼ã¯å¸¸ã«ç¡å颿°ãçæããããããããã¯ç°¡åã«å帰çã«èªèº«ãå¼ã³åºããã¨ãã§ãã¾ãããã¢ãã¼é¢æ°ãå帰çã«å¼ã³åºãä¸ã¤ã®æ¹æ³ã¯ãããã夿°ã«ä»£å ¥ãããã¨ã§ãã - ã¢ãã¼é¢æ°ã®æ§æã§ã¯ã
argumentsãthisã¯æã¡ã¾ããã Function()ã³ã³ã¹ãã©ã¯ã¿ã¼ã¯ãã¼ã«ã«å¤æ°ã«ã¢ã¯ã»ã¹ã§ãã¾ãããã°ãã¼ãã«ã¹ã³ã¼ãã®ã¿ã«ã¢ã¯ã»ã¹å¯è½ã§ããFunction()ã³ã³ã¹ãã©ã¯ã¿ã¼ã§ã¯å®è¡æã³ã³ãã¤ã«ãçºçããããããã以å¤ã®æ§æãããå¤ãã®å ´åãå¦çãé ããªãã¾ãã
function å¼ã§ã¯ã颿°åã¨é¢æ°ã代å
¥ããã夿°ã«ã¯éããããã¾ãã颿°åã¯å¤æ´ã§ãã¾ãããã颿°ã代å
¥ããã夿°ã¯å代å
¥ã§ãã¾ãã颿°åã¯ã颿°ã代å
¥ããã夿°ã¨ã¯ç°ãªãååãä»ãããã¨ãå¯è½ã§ãã両è
ã¯ãäºãã«é¢é£ã®ããã¾ããã颿°åã¯é¢æ°æ¬ä½å
ã§ã®ã¿ä½¿ç¨ã§ãã¾ãã颿°æ¬ä½å¤ã§ä½¿ç¨ãããã¨ããã¨ã¨ã©ã¼ãçºçãã¾ãï¼ã¾ãã¯ãåãååãå¥ã®å ´æã§å®£è¨ããã¦ããå ´åã¯å¥ã®å¤ãåå¾ããã¾ãï¼ã ä¾ãã°ã
const y = function x() {};
console.log(x); // ReferenceError: x is not defined
䏿¹ã颿°ãä»£å ¥ããã夿°ã¯ããã®ã¹ã³ã¼ãã«ãã£ã¦ã®ã¿å¶éããã¾ãããã®ã¹ã³ã¼ãã«ã¯ã颿°ã宣è¨ãããã¹ã³ã¼ããå«ããã¨ãä¿è¨¼ããã¦ãã¾ãã
颿°å®£è¨ã¯ã颿°åã¨åãååã®å¤æ°ã使ãã¾ãããããã£ã¦ã颿°å¼ã§å®ç¾©ããããã®ã¨ã¯ç°ãªãã颿°å®£è¨ã§å®ç¾©ããã颿°ã¯ãèªèº«ã®æ¬ä½å ã ãã§ãªããå®ç¾©ãããã¹ã³ã¼ãå ã§ããã®ååã§ã¢ã¯ã»ã¹ã§ãã¾ãã
new Function ã§å®ç¾©ããã颿°ã¯ããã®ã½ã¼ã¹ãåçã«ã¢ã»ã³ãã«ããã¾ããããã¯ã·ãªã¢ã©ã¤ãºæã«ç¢ºèªã§ãã¾ããä¾ãã°ãconsole.log(new Function().toString()) ã¯æ¬¡ã®ãããªçµæã«ãªãã¾ãã
function anonymous(
) {
}
ããã¯é¢æ°ãã³ã³ãã¤ã«ããããã«å®éã«ä½¿ç¨ãããã½ã¼ã¹ã§ãããã ãã Function() ã³ã³ã¹ãã©ã¯ã¿ã¼ã¯ anonymous ã¨ããååã®é¢æ°ãçæãã¾ããããã®ååã¯æ¬ä½ã¹ã³ã¼ãã«ã¯è¿½å ããã¾ãããæ¬ä½ã¯å¸¸ã«ã°ãã¼ãã«å¤æ°ã«ããã¢ã¯ã»ã¹ã§ãã¾ãããä¾ãã°ã次ã®ãã®ã¯ã¨ã©ã¼ã«ãªãã¾ãã
new Function("alert(anonymous);")();
颿°å¼ã¾ãã¯é¢æ°å®£è¨ã«ãã£ã¦å®ç¾©ããã颿°ã¯ãç¾å¨ã®ã¹ã³ã¼ããç¶æ¿ãã¾ããã¤ã¾ãããã®é¢æ°ã¯ã¯ãã¼ã¸ã£ãå½¢æãã¾ãã䏿¹ã Function ã³ã³ã¹ãã©ã¯ã¿ã¼ã«ãã£ã¦å®ç¾©ããã颿°ã¯ãã°ãã¼ãã«ã¹ã³ã¼ãï¼ãã¹ã¦ã®é¢æ°ãç¶æ¿ããï¼ä»¥å¤ã®ã¹ã³ã¼ããç¶æ¿ãã¾ããã
// p ã¯ã°ãã¼ãã«å¤æ°
globalThis.p = 5;
function myFunc() {
// p ã¯ãã¼ã«ã«å¤æ°
const p = 9;
function decl() {
console.log(p);
}
const expr = function () {
console.log(p);
};
const cons = new Function("\tconsole.log(p);");
decl();
expr();
cons();
}
myFunc();
// Logs:
// 9 ï¼é¢æ°å®ç¾©ã«ãã 'decl' ã®å ´åï¼ç¾å¨ã®ã¹ã³ã¼ãï¼ï¼
// 9 ï¼é¢æ°å¼ã«ãã 'expr' ã®å ´åï¼ç¾å¨ã®ã¹ã³ã¼ãï¼ï¼
// 5 ï¼ã³ã³ã¹ãã©ã¯ã¿ã¼ã«ãã 'cons' ã®å ´åï¼ã°ãã¼ãã«ã¹ã³ã¼ãï¼ï¼
颿°å¼ã颿°å®£è¨ã§å®ç¾©ããã颿°ã¯ä¸åº¦ã ãæ§æè§£æããã¾ããã Function ã³ã³ã¹ãã©ã¯ã¿ã¼ã§å®ç¾©ããã颿°ã¯ãã³ã³ã¹ãã©ã¯ã¿ã¼ãå¼ã³åºããããã³ã«æ¸¡ãããæååãæ¯åæ§æè§£æãã¾ãã颿°å¼ã¯ããããã¯ãã¼ã¸ã£ãçæãã¾ããã颿°æ¬ä½ã¯åè§£æãããªãããã颿°å¼ã¯ new Function(...) ãããé«éã§ãããããã£ã¦ãå¯è½ãªéã Function ã³ã³ã¹ãã©ã¯ã¿ã¼ã®ä½¿ç¨ã¯é¿ããã¹ãã§ãã
颿°å®£è¨ã¯ãå¼ã³ã³ããã¹ãå ã§ç¾ããå ´åãæå³ãã颿°å¼ã«å¤æããããã¨ãããã¾ãã
// 颿°å®£è¨
function foo() {
console.log("FOO!");
}
doSomething(
// 弿°ã¨ãã¦æ¸¡ããã颿°å¼
function foo() {
console.log("FOO!");
},
);
䏿¹ã颿°å¼ã¯é¢æ°å®£è¨ã«å¤æããããã¨ãããã¾ããå¼æã¯ function ã async function ãã¼ã¯ã¼ãã§å§ãããã¨ã¯ã§ãã¾ããããã㯠IIFEï¼å³æå®è¡é¢æ°å¼ï¼ãå®è£
ããéã«ããè¦ãããééãã§ãã
function () { // SyntaxError: Function statements require a function name
console.log("FOO!");
}();
function foo() {
console.log("FOO!");
}(); // SyntaxError: Unexpected token ')'
代ããã«ã弿ãå¥ã®æ¹æ³ã§å§ã¾ãããã«ãã function ãã¼ã¯ã¼ãã§ç¢ºå®ã«é¢æ°å¼ãå§ã¾ãããã«ãã¾ããä¸è¬çãªé¸æè¢ã«ã¯ãã°ã«ã¼ãåã void ã®ä½¿ç¨ãããã¾ãã
(function () {
console.log("FOO!");
})();
void function () {
console.log("FOO!");
}();
颿°ã®å¼æ°
颿°ã®ããããã®å¼æ°ã¯ããã¼ã«ã«ã¹ã³ã¼ãå ã§ã¢ã¯ã»ã¹ã§ããåç´ãªèå¥åã§ãã
function myFunc(a, b, c) {
// ããã§ a, b, c ã®å¤ã«ã¢ã¯ã»ã¹ã§ãã
}
ç¹å¥ãªå¼æ°ã®æ§æã 3 種é¡ããã¾ãã
- ããã©ã«ã弿° (Default parameters) ã使ç¨ããã¨ãå¤ã渡ãããªãã£ãå ´åã
undefinedãæ¸¡ãããå ´åã«ã仮弿°ãæ¢å®å¤ã§åæåã§ãã¾ãã - æ®ä½å¼æ° (rest parameter) ã使ç¨ããã¨ãä¸å®æ°ã®å¼æ°ãé åã¨ãã¦è¡¨ããã¨ãã§ãã¾ãã
- æ§é åè§£ (Destructuring) é åããè¦ç´ ããã¾ãã¯ãªãã¸ã§ã¯ãããããããã£ããåã ã®å¤æ°ã«å±éãããã¨ãã§ãã¾ãã
function myFunc({ a, b }, c = 1, ...rest) {
// ããã§ a, b, c, rest ã®å¤ã«ã¢ã¯ã»ã¹ã§ãã
}
ä¸è¨ã®åç´ã§ãªã弿°æ§æã®ããããã使ç¨ããã¦ããå ´åãããã¤ãã®å½±é¿ãããã¾ãã
- 颿°æ¬ä½ã«
"use strict"ãé©ç¨ãããã¨ã¯ã§ãã¾ãããããã«ãããæ§æã¨ã©ã¼ãçºçãã¾ãã - 颿°ã峿 ¼ã¢ã¼ãã§ãªãã¦ããç¹å®ã®å³æ ¼ã¢ã¼ã颿°æ©è½ãé©ç¨ããã¾ãã
argumentsãªãã¸ã§ã¯ããååä»ã弿°ã¨ã®åæã忢ããããarguments.calleeã«ã¢ã¯ã»ã¹ããã¨ã¨ã©ã¼ãçºçããããéè¤ãã弿°åãå©ç¨ã§ããªãã£ãããã¾ãã
arguments ãªãã¸ã§ã¯ã
arguments ãªãã¸ã§ã¯ãã使ç¨ããã¨ã颿°å
é¨ã§é¢æ°ã®å®å¼æ°ãåç
§ãããã¨ãã§ãã¾ãã
arguments-
ç¾å¨å®è¡ä¸ã®é¢æ°ã«æ¸¡ããã弿°ãæ ¼ç´ããé å風ãªãã¸ã§ã¯ãã
arguments.callee-
ç¾å¨å®è¡ä¸ã®é¢æ°ã
arguments.length:-
颿°ã«æ¸¡ããã弿°ã®æ°ã
ã²ãã¿ã¼ããã³ã»ãã¿ã¼é¢æ°
æ¨æºã®çµã¿è¾¼ã¿ãªãã¸ã§ã¯ãã ã¦ã¼ã¶ã¼å®ç¾©ãªãã¸ã§ã¯ãã«ã¯ã追å ã®ããããã£ã«å¯¾å¿ãã¦ãããã®ãªãããããã«ãã¢ã¯ã»ãµã¼ããããã£ãå®ç¾©ã§ãã¾ãããªãã¸ã§ã¯ããªãã©ã«ãã¯ã©ã¹å ã§ãç¹å¥ãªæ§æã使ç¨ãã¦ã¢ã¯ã»ãµã¼ããããã£ã®ã²ãã¿ã¼ã¨ã»ãã¿ã¼ãå®ç¾©ãããã¨ãã§ãã¾ãã
- get
-
ãªãã¸ã§ã¯ãã®ããããã£ãããã®ããããã£ãæ¤ç´¢ãããã¨ãã«å¼ã³åºããã颿°ã«æç¸ãã¾ãã
- set
-
ãããªãã¸ã§ã¯ãã®ããããã£ãããã®ããããã£ã«ä»£å ¥ãããã¨ããã¨ãã«å¼ã³åºããã颿°ã«çµã³ã¤ãã¾ãã
ãªãããããã®æ§æã¯ãªãã¸ã§ã¯ãã®ã¡ã½ããã§ã¯ãªããããããã£ãçæãã¾ããã²ãã¿ã¼é¢æ°ãã»ãã¿ã¼é¢æ°èªä½ã¯ãObject.getOwnPropertyDescriptor() ãªã©ã®ãªãã¬ã¯ã·ã§ã³ API ã使ç¨ãã¦ã®ã¿ã¢ã¯ã»ã¹ã§ãã¾ãã
ãããã¯ã¬ãã«é¢æ°
峿 ¼ã¢ã¼ãã§ã¯ããããã¯å ã®é¢æ°ã¯ãã®ãããã¯ã«æ°ããã¹ã³ã¼ããå½¢æãã¾ãã ES2015 ããåã§ã¯ããããã¯ã¬ãã«é¢æ°ã¯å³æ ¼ã¢ã¼ãã§ã¯ç¦æ¢ããã¦ãã¾ãã
"use strict";
function f() {
return 1;
}
{
function f() {
return 2;
}
}
f() === 1; // true
// 峿 ¼ã¢ã¼ã以å¤ã§ã¯ f() === 2
峿 ¼ã¢ã¼ãã®ã³ã¼ã以å¤ã«ããããããã¯ã¬ãã«é¢æ°
ä¸è¨ã§è¨ãã°ã使ããªãã§ãã ããã
峿 ¼ã¢ã¼ãã®ã³ã¼ã以å¤ã§ã¯ããããã¯å ã®é¢æ°å®£è¨ã¯å¥å¦ãªåä½ããã¾ããæ¬¡ã®ä¾ãè¦ã¦ãã ããã
if (shouldDefineZero) {
function zero() {
// å±éº: äºææ§ãªã¹ã¯
console.log("ããã¯ã¼ãã§ãã");
}
}
峿 ¼ã¢ã¼ãã«ããããã®æå³ã¥ãã¯æç¢ºã«æå®ããã¦ãã¾ãã zero ã¯å¸¸ã« if ãããã¯ã®ã¹ã³ã¼ãå
ã§ã®ã¿åå¨ãã¾ãã shouldDefineZero ã false ã®å ´åããããã¯ã¯æ±ºãã¦å®è¡ãããªãããã zero ã¯å®ç¾©ãã¹ãã§ã¯æ±ºãã¦ããã¾ãããããããéå»ã«ã¯ããã¯æªæå®ã®ã¾ã¾ã«ããã¦ããããã峿 ¼ã¢ã¼ã以å¤ã§ã¯ãã©ã¦ã¶ã¼ã«ãã£ã¦å®è£
ãç°ãªã£ã¦ãã¾ãããããè©³ç´°ãªæ
å ±ã«ã¤ãã¦ã¯ãfunction宣è¨ã®ãªãã¡ã¬ã³ã¹ãåç
§ãã¦ãã ããã
æ¡ä»¶ä»ãã§é¢æ°ãå®ç¾©ããããå®å ¨ãªæ¹æ³ã¯ã夿°ã«é¢æ°å¼ãä»£å ¥ãããã¨ã§ãã
// var ã使ç¨ããã¨ãã°ãã¼ãã«å¤æ°ã¨ãã¦å©ç¨å¯è½ã«ãªãã
// æä¸ä½ã®é¢æ°å®£è¨ã«è¿ãåä½ã«ãªã
var zero;
if (shouldDefineZero) {
zero = function () {
console.log("ããã¯ã¼ãã§ãã");
};
}
ä¾
>æ¸å¼åãããæ°å¤ãè¿ã
次ã®é¢æ°ã¯ãæ°å¤ãå é ã«ã¼ããä»ãã¦æ¸å¼åããæååã§è¿ãã¾ãã
// ãã®é¢æ°ã¯å
é ã«ã¼ããè¶³ãã¦åºå®é·ã«ããæååãè¿ã
function padZeros(num, totalLen) {
let numStr = num.toString(); // è¿å¤ãæååã¨ãã¦åæå
const numZeros = totalLen - numStr.length; // ã¼ãã®æ°ãè¨ç®
for (let i = 1; i <= numZeros; i++) {
numStr = `0${numStr}`;
}
return numStr;
}
æ¬¡ã®æã§ padZeros 颿°ãå¼ã³åºãã¾ãã
let result;
result = padZeros(42, 4); // "0042" ãè¿ã
result = padZeros(42, 2); // "42" ãè¿ã
result = padZeros(5, 4); // "0005" ãè¿ã
颿°ãåå¨ãããã©ãã確èª
typeof æ¼ç®åã使ãã¨ã颿°ãåå¨ãããã©ããã確ããããã¨ãã§ãã¾ããæ¬¡ã®ä¾ã§ã¯ãwindow ãªãã¸ã§ã¯ãã noFunc ã¨ãã颿°ã®ããããã£ãæã¤ãã©ããã確ãããããã®ãã¹ããè¡ããã¾ããããæã£ã¦ããããããã使ããã¾ããããã§ãªããã°ãä»ã®è¡åãåããã¾ãã
if (typeof window.noFunc === "function") {
// noFunc() ã使ã
} else {
// ä½ãä»ã®ãã¨ããã
}
if ã®ãã¹ãã®ä¸ã§ãnoFunc ã¸ã®åç
§ã使ããã¦ããã®ã«æ³¨ç®ãã¦ãã ããã颿°åã®å¾ã«æ¬å¼§ "()" ããªãã®ã§ãå®éã®é¢æ°ã¯å¼ã³åºããã¾ããã
仿§æ¸
| 仿§æ¸ |
|---|
| ECMAScript® 2027 Language Specification > # sec-function-definitions > |
ãã©ã¦ã¶ã¼ã®äºææ§
é¢é£æ å ±
- 颿°ã¬ã¤ã
- ã¯ã©ã¹
functionfunctionå¼Function