é»è®¤åæ°å¼
åºçº¿
广æ³å¯ç¨
èª 2016å¹´9æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
彿°é»è®¤åæ°å
è®¸å¨æ²¡æå¼æ undefined è¢«ä¼ å
¥æ¶ä½¿ç¨é»è®¤å½¢åã
å°è¯ä¸ä¸
function multiply(a, b = 1) {
return a * b;
}
console.log(multiply(5, 2));
// Expected output: 10
console.log(multiply(5));
// Expected output: 5
è¯æ³
function [name]([param1[ = defaultValue1 ][, ..., paramN[ = defaultValueN ]]]) {
statements
}
æè¿°
JavaScript ä¸å½æ°çåæ°é»è®¤æ¯ undefinedãç¶èï¼å¨æäºæ
åµä¸å¯è½éè¦è®¾ç½®ä¸ä¸ªä¸åçé»è®¤å¼ãè¿æ¯é»è®¤åæ°å¯ä»¥å¸®å©çå°æ¹ã
以åï¼ä¸è¬è®¾ç½®é»è®¤åæ°çæ¹æ³æ¯å¨å½æ°ä½æµè¯åæ°æ¯å¦ä¸º undefinedï¼å¦ææ¯çè¯å°±è®¾ç½®ä¸ºé»è®¤çå¼ã
ä¸é¢çä¾åä¸ï¼å¦æå¨è°ç¨ multiply æ¶ï¼åæ° b ç弿²¡ææä¾ï¼é£ä¹å®çå¼å°±ä¸º undefinedãå¦æç´æ¥æ§è¡ a * bï¼å½æ°ä¼è¿å NaNã
function multiply(a, b) {
return a * b;
}
multiply(5, 2); // 10
multiply(5); // NaN !
为äºé²æ¢è¿ç§æ
åµï¼ç¬¬äºè¡ä»£ç è§£å³äºè¿ä¸ªé®é¢ï¼å
¶ä¸å¦æåªä½¿ç¨ä¸ä¸ªåæ°è°ç¨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
示ä¾
>ä¼ å
¥ undefined vs å
¶ä»åå¼
å¨ç¬¬äºæ¬¡è°ç¨ä¸ï¼å³ä½¿ç¬¬ä¸ä¸ªåæ°å¨è°ç¨æ¶æ¾å¼è®¾ç½®ä¸ºundefinedï¼è½ç¶ä¸æ¯nullæå
¶ä»falsyå¼ï¼ï¼ä½æ¯numåæ°ç弿¯é»è®¤å¼ã
function test(num = 1) {
console.log(typeof num);
}
test(); // 'number' (num is set to 1)
test(undefined); // 'number' (num is set to 1 too)
// test with other falsy values:
test(""); // 'string' (num is set to '')
test(null); // 'object' (num is set to null)
è°ç¨æ¶è§£æ
å¨å½æ°è¢«è°ç¨æ¶ï¼åæ°é»è®¤å¼ä¼è¢«è§£æï¼æä»¥ä¸å Python ä¸çä¾åï¼æ¯æ¬¡å½æ°è°ç¨æ¶é½ä¼å建ä¸ä¸ªæ°çåæ°å¯¹è±¡ã
function append(value, array = []) {
array.push(value);
return array;
}
append(1); //[1]
append(2); //[2], not [1, 2]
è¿ä¸ªè§å对äºå½æ°ååé乿¯éç¨çã
function callSomething(thing = something()) {
return thing;
}
let numberOfTimesCalled = 0;
function something() {
numberOfTimesCalled += 1;
return numberOfTimesCalled;
}
callSomething(); // 1
callSomething(); // 2
é»è®¤åæ°å¯ç¨äºåé¢çé»è®¤åæ°
å·²ç»éå°çåæ°å¯ç¨äºä»¥åçé»è®¤åæ°ï¼
function greet(name, greeting, message = greeting + " " + name) {
return [name, greeting, message];
}
greet("David", "Hi"); // ["David", "Hi", "Hi David"]
greet("David", "Hi", "Happy Birthday!"); // ["David", "Hi", "Happy Birthday!"]
以ä¸è¿ä¸ªä¾åè¿ä¼¼æ¨¡æäºä¸äºæ¯è¾ç®åçæ åµï¼å¹¶è¯´æäºç¹æ®æ 嵿¯æä¹è¢«å¤ççã
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:
a;
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;
default:
}
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, "=^_^="]
彿°åµå¥å®ä¹
å¨ Gecko 33 ä¸å¼å
¥ãå¨å½æ°ä½å
ç彿°å£°æä¸è½å¼ç¨å
é¨çé»è®¤åæ°ï¼å¹¶ä¸ä¼å¨ SpiderMonkey æåºä¸ä¸ªReferenceErrorï¼ç°å¨æ¯ TypeErrorï¼ï¼åè§ Firefox bug 1022967ãé»è®¤åæ°æ»æ¯ä¼è¢«é¦å
æ§è¡ï¼èå¨å½æ°ä½å
é¨ç彿°å£°æä¼å¨ä¹åçæã
// Doesn't work! Throws ReferenceError.
function f(a = go()) {
function go() {
return ":P";
}
}
ä½äºé»è®¤åæ°ä¹åéé»è®¤åæ°
å¨ Gecko 26 ä¹åï¼ä»¥ä¸ä»£ç ä¼é æSyntaxErroré误ãè¿å·²ç»å¨Firefox bug 1022967ä¸ä¿®å¤ï¼å¹¶å¨ä»¥åççæ¬ä¸æé¢ææ¹å¼å·¥ä½ãåæ°ä»ç¶è®¾ç½®ä¸ºä»å·¦å°å³ï¼è¦çé»è®¤åæ°ï¼å³ä½¿åé¢çåæ°æ²¡æé»è®¤å¼ã
function f(x = 1, y) {
return [x, y];
}
f(); // [1, undefined]
f(2); // [2, undefined]
æé»è®¤å¼çè§£æåæ°
ä½ å¯ä»¥éè¿è§£æä¸ºåæ°èµå¼ï¼
function f([x, y] = [1, 2], { z: z } = { z: 3 }) {
return x + y + z;
}
f(); // 6
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification> # sec-function-definitions> |
æµè§å¨å ¼å®¹æ§
åè§
- 彿°æå
- 彿°åè
- å©ä½åæ°
- 空å¼åå¹¶è¿ç®ç¬¦ï¼
??ï¼