function
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since 2015å¹´7æ.
function 宣è¨ã¯ãæ°ãã颿°ã¨æå®ãããååã®ãã¤ã³ãã使ãã¾ãã
颿°ã¯ function å¼ã使ç¨ãã¦å®ç¾©ãããã¨ãã§ãã¾ãã
試ãã¦ã¿ã¾ããã
function calcRectArea(width, height) {
return width * height;
}
console.log(calcRectArea(5, 6));
// äºæ³ãããçµæ: 30
æ§æ
function name(param0) {
statements
}
function name(param0, param1) {
statements
}
function name(param0, param1, /* â¦, */ paramN) {
statements
}
弿°
name-
颿°ã®ååã§ãã
paramçç¥å¯-
ãã®é¢æ°ã®å ¬å¼ãªå¼æ°ã®ååã§ãã弿°ã®æå¤§æ°ã¯ã¨ã³ã¸ã³ã«ãã£ã¦ç°ãªãã¾ãã弿°ã®æ§æã«ã¤ãã¦ã¯ã颿°ãªãã¡ã¬ã³ã¹ãåç §ãã¦ãã ããã
statementsçç¥å¯-
颿°ã®æ¬ä½ãæ§æããæã§ãã
解説
颿°å®£è¨ã¯ Function ãªãã¸ã§ã¯ããçæãã¾ãã颿°ãå¼ã³åºããããã³ã«ãæå¾ã«å®è¡ããã return æã§æå®ãããå¤ãè¿ãã¾ãã颿°æ¬ä½ã®æ«å°¾ã«å°éããå ´åã¯undefinedãè¿ãã¾ãã颿°ã®è©³ç´°ã«ã¤ãã¦ã¯ã颿°ãåç
§ãã¦ãã ããã
function 宣è¨ã¯ãvar 㨠let ãä½µãããããªåä½ããã¾ãã
letã¨åæ§ã«ã峿 ¼ã¢ã¼ãã§ã¯ã颿°å¶éã¯æãè¿ãå å«ãããã¯ã®ã¹ã³ã¼ãã«ãªãã¾ããletã¨åæ§ã«ãã¢ã¸ã¥ã¼ã«ã®æä¸ä½ã§ã®é¢æ°å®£è¨ãã峿 ¼ã¢ã¼ãã§ã®ãããã¯å ã§ã¯ãä»ã®å®£è¨ã§å宣è¨ãããã¨ãã§ãã¾ãããvarã¨åæ§ã«ãã¹ã¯ãªããã®æä¸ä½ã§ã®é¢æ°å®£è¨ã¯ï¼å³æ ¼ã¢ã¼ããå¦ãã«é¢ãããï¼ãglobalThisã®ããããã£ã¨ãªãã¾ããã¹ã¯ãªããã®æä¸ä½ã¾ãã¯é¢æ°æ¬ä½ã§ã®é¢æ°å®£è¨ã¯ï¼å³æ ¼ã¢ã¼ããå¦ãã«é¢ãããï¼ãå¥ã®functionã¾ãã¯varã«ãã£ã¦å宣è¨ãããå¯è½æ§ãããã¾ãã- 両è ã¨åæ§ã«ã颿°å®£è¨ã¯åå²ãå½ã¦å¯è½ã§ãããããã¯é¿ããã¹ãã§ãã
- ã©ã¡ãã¨ãç°ãªãã颿°å®£è¨ã¯ãã®å¤ã¨ã¨ãã«å·»ãä¸ãããããã®ã¹ã³ã¼ãå ã®ã©ãã§ãå¼ã³åºããã¨ãã§ãã¾ãã
ãããã¯ã¬ãã«é¢æ°å®£è¨
è¦å: 峿 ¼ã¢ã¼ãã§ã¯ãªãå ´åããããã¯å ã§ã®é¢æ°å®£è¨ã¯å¥å¦ãªåãããã¾ãããããã¯å ã§ã®é¢æ°å®£è¨ã¯ã峿 ¼ã¢ã¼ãæã®ã¿è¡ã£ã¦ãã ããã
颿°ã¯æ¡ä»¶ä»ãã§å®£è¨ã§ãã¾ããã¤ã¾ãã颿°æã if æã®ä¸ã«å
¥ãåã«ãããã¨ãã§ãã¾ãããã ãã峿 ¼ã¢ã¼ãã§ãªãå ´åãå®è£
ã«ãã£ã¦çµæã«ä¸è²«æ§ãããã¾ããã
console.log(
`'foo' ã®ååã¯ã°ãã¼ãã«${
"foo" in globalThis ? "ã§ã" : "ã§ã¯ããã¾ãã"
}ã typeof foo 㯠${typeof foo} ã§ãã`,
);
if (false) {
function foo() {
return 1;
}
}
// Chrome ã§ã¯:
// 'foo' ã®ååã¯ã°ãã¼ãã«ã§ãã typeof foo 㯠undefined ã§ãã
//
// Firefox ã§ã¯:
// 'foo' ã®ååã¯ã°ãã¼ãã«ã§ãã typeof foo 㯠undefined ã§ãã
//
// Safari ã§ã¯:
// 'foo' ã®ååã¯ã°ãã¼ãã«ã§ãã typeof foo 㯠function ã§ãã
if æ¬ä½ãå®éã«å®è¡ããããã©ããã«ããããããã¹ã³ã¼ãã¨å·»ãä¸ãã®å¹æã¯å¤ããã¾ããã
console.log(
`'foo' ã®ååã¯ã°ãã¼ãã«${
"foo" in globalThis ? "ã§ã" : "ã§ã¯ããã¾ãã"
}ã typeof foo 㯠${typeof foo} ã§ãã`,
);
if (true) {
function foo() {
return 1;
}
}
// In Chrome:
// 'foo' ã®ååã¯ã°ãã¼ãã«ã§ãã typeof foo 㯠undefined ã§ãã
//
// In Firefox:
// 'foo' ã®ååã¯ã°ãã¼ãã«ã§ãã typeof foo 㯠undefined ã§ãã
//
// In Safari:
// 'foo' ã®ååã¯ã°ãã¼ãã«ã§ãã typeof foo 㯠function ã§ãã
峿 ¼ã¢ã¼ãã§ã¯ããããã¯ã¬ãã«ã®é¢æ°å®£è¨ã¯ãã®ãããã¯ã®ã¹ã³ã¼ãã¨ãªãããã®ãããã¯ã®å é ã«å·»ãä¸ãããã¾ãã
"use strict";
{
foo(); // "foo" ããã°åºå
function foo() {
console.log("foo");
}
}
console.log(
`'foo' ã®ååã¯ã°ãã¼ãã«${
"foo" in globalThis ? "ã§ã" : "ã§ã¯ããã¾ãã"
}ã typeof foo 㯠${typeof foo} ã§ãã`,
);
// 'foo' ã®ååã¯ã°ãã¼ãã«ã§ã¯ããã¾ããã typeof foo 㯠undefined ã§ãã
å·»ãä¸ã
JavaScript ã®é¢æ°å®£è¨ã¯ããããå²ã颿°ãã°ãã¼ãã«ã¹ã³ã¼ãã®å é ã«å·»ãä¸ãããã¾ãã颿°ã宣è¨ããåã«ä½¿ããã¨ãã§ãã¾ãã
hoisted(); // "foo" ã¨ãã°åºå
function hoisted() {
console.log("foo");
}
颿°å¼ã¯å·»ãä¸ããããªããã¨ã«æ³¨æãã¦ãã ããã
notHoisted(); // TypeError: notHoisted is not a function
var notHoisted = function () {
console.log("bar");
};
å宣è¨
function 宣è¨ãåãã¹ã³ã¼ãå
ã§å宣è¨ã§ãããã©ããã¯ããããå«ã¾ãã¦ããã¹ã³ã¼ãã«ãã£ã¦æ±ºã¾ãã¾ãã
ã¹ã¯ãªããã®æä¸ä½ã¬ãã«ã§ã¯ãfunction 宣è¨ã¯ var ã¨åæ§ã«æ¯ãèããå¥ã® function ã¾ã㯠var ã«ãã£ã¦å宣è¨å¯è½ã§ãããletãconstãclass ã«ãã£ã¦å宣è¨ãããã¨ã¯ã§ãã¾ããã
function a(b) {}
function a(b, c) {}
console.log(a.length); // 2
let a = 2; // SyntaxError: Identifier 'a' has already been declared
function 宣è¨ã var ã«ãã£ã¦å宣è¨ãããå ´åãvar 宣è¨ã®åæååã¯ã両è
ã®ç¸å¯¾çãªä½ç½®ã«é¢ä¿ãªãã常ã«ãã®é¢æ°ã®å¤ã䏿¸ããã¾ããããã¯ã颿°å®£è¨ãåæååã®è©ä¾¡ããåã«å·»ãä¸ããããããã§ãããåæååã¯å¾ããå®è¡ãããå¤ã䏿¸ãããããã§ãã
var a = 1;
function a() {}
console.log(a); // 1
颿°æ¬ä½ã®æä¸ä½ã¬ãã«ã§ã¯ãfunction ã var ã¨åæ§ã«æ¯ãèããå宣è¨ããã弿°ã¨åãååãæã£ãããããã¨ãå¯è½ã§ãã
function foo(a) {
function a() {}
console.log(typeof a);
}
foo(2); // ãã°åºå: "function"
峿 ¼ã¢ã¼ãã§ã¯ãã¢ã¸ã¥ã¼ã«ã¾ãã¯ãããã¯ã®æä¸ä½ã¬ãã«ã«ããã function 宣è¨ã¯ let ã¨åæ§ã«åä½ãããã以å¤ã®ãããªã宣è¨ã«ãã£ã¦ãå宣è¨ãããã¨ã¯ã§ãã¾ããã
// ç¾å¨ã®ã½ã¼ã¹ãã¢ã¸ã¥ã¼ã«ã§ããå ´å
function foo() {}
function foo() {} // SyntaxError: Identifier 'foo' has already been declared
"use strict";
{
function foo() {}
function foo() {} // SyntaxError: Identifier 'foo' has already been declared
}
catch ãããã¯å
ã® function 宣è¨ã¯ã峿 ¼ã¢ã¼ãã§ãªãã¦ããcatch ã«ãã¤ã³ããããèå¥åã¨åãååãæã¤ãã¨ã¯ã§ãã¾ããã
try {
} catch (e) {
function e() {} // SyntaxError: Identifier 'e' has already been declared
}
ä¾
>function ã®ä½¿ç¨
以ä¸ã®ã³ã¼ãã¯ã3 ã¤ã®ååã®è²©å£²åæ°ãæå®ãããã¨ãã«ã売ä¸ã®åè¨é¡ãè¿ã颿°ã宣è¨ãã¦ãã¾ãã
function calcSales(unitsA, unitsB, unitsC) {
return unitsA * 79 + unitsB * 129 + unitsC * 699;
}
仿§æ¸
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-function-definitions> |