function
åºçº¿
广æ³å¯ç¨
èª 2015å¹´7æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
function 声æå建ä¸ä¸ªç»å®å°ç»å®åç§°çæ°å½æ°ã
ä½ ä¹å¯ä»¥ä½¿ç¨ function è¡¨è¾¾å¼æ¥å®ä¹å½æ°ã
å°è¯ä¸ä¸
function calcRectArea(width, height) {
return width * height;
}
console.log(calcRectArea(5, 6));
// Expected output: 30
è¯æ³
function name(param0) {
statements
}
function name(param0, param1) {
statements
}
function name(param0, param1, /* â¦, */ paramN) {
statements
}
åæ°
name-
彿°åç§°ã
paramå¯é-
彿°çå½¢ååç§°ãä¸å弿ä¸çæå¤§åæ°æ°éææä¸åãæå ³åæ°çè¯æ³ï¼è¯·åé 彿°åèã
statementså¯é-
ææå½æ°ä½çè¯å¥ã
æè¿°
function 声æå建ä¸ä¸ª 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;
}
}
// å¨ Chrome ä¸ï¼
// âfooâåç§°æ¯å
¨å±çãtypeof foo çäº undefined
//
// å¨ Firefox ä¸ï¼
// âfooâåç§°æ¯å
¨å±çãtypeof foo çäº undefined
//
// å¨ 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 calcSales(unitsA, unitsB, unitsC) {
return unitsA * 79 + unitsB * 129 + unitsC * 699;
}
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification> # sec-function-definitions> |