é è¨åæ¸
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since 2016å¹´9æ.
å½å¼é è¨åæ¸å
è¨±æ²æå³å
¥å¼ææ¯å³å
¥å¼çº undefined çæ
æ³ä¸ï¼åæ¸è½ä»¥æå®çé è¨å¼åå§åã
å試ä¸ä¸
function multiply(a, b = 1) {
return a * b;
}
console.log(multiply(5, 2));
// é æè¼¸åºï¼10
console.log(multiply(5));
// é æè¼¸åºï¼5
èªæ³
function fnName(param1 = defaultValue1, /* â¦, */ paramN = defaultValueN) {
// â¦
}
說æ
å¨ JavaScript ä¸ï¼å½å¼ç忏é è¨å¼é½çº undefinedãç¶èï¼æäºæ
æ³ä¸å¯è½éè¦æå®ä¸åçé è¨å¼ãé乿¯å½å¼åæ¸é è¨å¼å¯ä»¥å¹«ä¸å¿çå°æ¹ã
å¨ä¸åç¯ä¾è£¡ï¼è¥ multiply 被å¼å«æï¼ä¸¦æ²ææä¾ b çå¼ï¼b çå¼å°±ææ¯ undefinedï¼è¨ç® a * b å multiply å°±æåå³ NaNã
function multiply(a, b) {
return a * b;
}
multiply(5, 2); // 10
multiply(5); // NaNï¼
以å¾è¨å®é è¨å¼çå¸¸ç¨æ¹å¼ï¼æ¯å¨å½å¼è£¡æª¢æ¥å³å
¥åæ¸æ¯å¦çº undefinedï¼æ¯ç話就ç²å®æå®ä¸åå¼ãå¨ä»¥ä¸ç¯ä¾è£¡ï¼å¦æ multiply 被å¼å«æåªæå³å
¥ä¸å忏ï¼b å°±æè¢«è¨å®æ 1ï¼
function multiply(a, b) {
b = typeof b !== "undefined" ? b : 1;
return a * b;
}
multiply(5, 2); // 10
multiply(5); // 5
æäºé è¨åæ¸ï¼å°±ä¸ç¨å¨å½å¼è£¡æª¢æ¥äºãç¾å¨åªéè¦å¨å½å¼èµ·å§èçºæå® b çå¼çº 1ï¼
function multiply(a, b = 1) {
return a * b;
}
multiply(5, 2); // 10
multiply(5); // 5
multiply(5, undefined); // 5
忏ä»ç¶æç±å·¦è³å³è¨å®ï¼å°±ç®å¾é¢åºç¾æ²æé è¨å¼ç忏ï¼ä¾ç¶æè¦å¯«åæ¸é è¨å¼ã
function f(x = 1, y) {
return [x, y];
}
f(); // [1, undefined]
f(2); // [2, undefined]
å註ï¼ç¬¬ä¸åé è¨åæ¸åå
¶å¾é¢ææåæ¸ç䏿影é¿å½å¼ç lengthã
é è¨åæ¸çåå§å¼è¨å®ä½æ¼èªèº«çä½ç¨åå §ï¼è©²ä½ç¨åæ¯å½å¼ä¸»é«æå»ºç«ä½ç¨åçç¶ä½ç¨åã
éè¡¨ç¤ºç¨æ©å®£åç忏å¯ä»¥å¨å¾çºåæ¸çåå§å¼è¨ç½®ä¸è¢«å¼ç¨ãç¶èï¼å¨å½å¼ä¸»é«å
§å®£åçå½å¼èè®æ¸ï¼ç¡æ³å¨é è¨åæ¸çåå§å¼ä¸è¢«å¼ç¨ï¼è¥å試é麼åï¼å°ææåºå·è¡é段ç ReferenceErrorãéä¹å
å«å¨å½å¼ä¸»é«å
§ä»¥ var 宣åçè®æ¸ã
ä¾å¦ï¼ä»¥ä¸å½å¼å¨å¼å«æææåº ReferenceErrorï¼å çºé è¨åæ¸å¼ç¡æ³ååå½å¼ä¸»é«çåä½ç¨åï¼
function f(a = go()) {
function go() {
return ":P";
}
}
f(); // ReferenceError: go is not defined
æ¤å½å¼å°è¼¸åºåæ¸ a çå¼ï¼å çºè®æ¸ var a åªè¢«æåï¼hoistï¼è³å½å¼ä¸»é«æå»ºç«çä½ç¨åé 端ï¼èé忏æ¸
å®æå»ºç«çç¶ä½ç¨åï¼å æ¤ b ç¡æ³ååè©²è®æ¸çå¼ã
function f(a, b = () => console.log(a)) {
var a = 1;
b();
}
f(); // undefined
f(5); // 5
é è¨åæ¸å
許使ç¨ä»»ä½éç®å¼ï¼ä½ä¸å¯ä½¿ç¨ await æ yieldï¼å çºéäºéç®åæå°è´é è¨éç®å¼çè¨ç®æ«åã忏çåå§åå¿
é æ¯åæ¥å®æçã
async function f(a = await Promise.resolve(1)) {
return a;
}
å註ï¼ç±æ¼é è¨åæ¸æ¯å¨å½å¼è¢«å¼å«æè¨ç®ï¼è䏿¯å¨å½å¼è¢«å®ç¾©æï¼å æ¤ await å yield éç®åçæææ§å決æ¼è©²å½å¼æ¬èº«ï¼èéå
¶å¤åå½å¼ãä¾å¦ï¼å¦æç¶åå½å¼ä¸æ¯ asyncï¼å await æè¢«è§£æçºèå¥åï¼ä¸¦éµå¾ªä¸è¬çèå¥åèªæ³è¦åï¼å³ä¾¿è©²å½å¼åµå¥æ¼ async å½å¼å
§ä¹æ¯å¦æ¤ã
ç¯ä¾
>å³å ¥ undefined åå ¶å®åå¼
å¨ä»¥ä¸ç¯ä¾çç¬¬äºæ¬¡å¼å«ä¸ï¼å³ä½¿ç¬¬ä¸ååæ¸è¢«æç¢ºè¨å®çº undefinedï¼ä½ä¸æ¯ null æå
¶ä»åå¼ï¼ï¼num 忏çå¼ä»ç¶æ¯é è¨å¼ã
function test(num = 1) {
console.log(typeof num);
}
test(); // 'number'ï¼num 被è¨å®çº 1ï¼
test(undefined); // 'number'ï¼num ä¹è¢«è¨å®çº 1ï¼
// 測試å
¶å®åå¼ï¼falsyï¼ï¼
test(""); // 'string'ï¼num 被è¨å®çºç©ºå串 ''ï¼
test(null); // 'object'ï¼num 被è¨å®çº nullï¼
å¼å«æè¨ç®å¼
é è¨å¼æ¸æå¨å¼å«æé²è¡è¨ç®ãè Pythonï¼ä¾å¦ï¼ä¸åï¼æ¯æ¬¡å¼å«å½å¼æé½æå»ºç«ä¸åæ°çç©ä»¶ã
function append(value, array = []) {
array.push(value);
return array;
}
append(1); // [1]
append(2); // [2], èé [1, 2]
éä¹é©ç¨æ¼å½å¼èè®æ¸ï¼
function callSomething(thing = something()) {
return thing;
}
let numberOfTimesCalled = 0;
function something() {
numberOfTimesCalled += 1;
return numberOfTimesCalled;
}
callSomething(); // 1
callSomething(); // 2
åé¢ç忏å¯ä¾ä¹å¾é è¨åæ¸ä½¿ç¨
è¼æ©ï¼ä½æ¼å·¦å´ï¼å®ç¾©ç忏å¯ä¾å¾çºçé è¨åæ¸ä½¿ç¨ï¼
function greet(greeting, name, message = `${greeting}ï¼${name}`) {
return [greeting, name, message];
}
greet("ä½ å¥½", "大è¡"); // ["ä½ å¥½", "大è¡", "ä½ å¥½ï¼å¤§è¡"]
greet("ä½ å¥½", "大è¡", "çæ¥å¿«æ¨ï¼"); // ["ä½ å¥½", "大è¡", "çæ¥å¿«æ¨ï¼"]
éåå½å¼å¯ä»¥è¿ä¼¼å¦ä¸ï¼å®å±ç¤ºäºèç許å¤éç·£æ æ³ï¼
function go() {
return ":P";
}
function withDefaults(
a,
b = 5,
c = b,
d = go(),
e = this,
f = arguments,
g = this.value,
) {
return [a, b, c, d, e, f, g];
}
function withoutDefaults(a, b, c, d, e, f, g) {
switch (arguments.length) {
case 0:
case 1:
b = 5;
case 2:
c = b;
case 3:
d = go();
case 4:
e = this;
case 5:
f = arguments;
case 6:
g = this.value;
}
return [a, b, c, d, e, f, g];
}
withDefaults.call({ value: "=^_^=" });
// [undefined, 5, 5, ":P", {value:"=^_^="}, arguments, "=^_^="]
withoutDefaults.call({ value: "=^_^=" });
// [undefined, 5, 5, ":P", {value:"=^_^="}, arguments, "=^_^="]
ææå®é è¨å¼çè§£æ§åæ¸
ä½ å¯ä»¥ééè§£æ§èªæ³æå®é è¨å¼ã
ä¸ç¨®å¸¸è¦çåæ³æ¯å°ç©ºç©ä»¶æç©ºé£åä½çºè§£æ§åæ¸çé è¨å¼ï¼ä¾å¦ï¼[x = 1, y = 2] = []ã鿍£å³ä½¿å½å¼æ²ææ¥æ¶å°ä»»ä½å¼æ¸ï¼éäºå¼ä»ç¶æè¢«é å
å¡«å
¥ï¼
function preFilledArray([x = 1, y = 2] = []) {
return x + y;
}
preFilledArray(); // 3
preFilledArray([]); // 3
preFilledArray([2]); // 4
preFilledArray([2, 3]); // 5
// ç©ä»¶æä½ææ¯å¦æ¤ï¼
function preFilledObject({ z = 3 } = {}) {
return z;
}
preFilledObject(); // 3
preFilledObject({}); // 3
preFilledObject({ z: 2 }); // 2
è¦ç¯
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-function-definitions> |