å·²å¼ç¨: ä¸åæ¨è使ç¨è¯¥ç¹æ§ãè½ç¶ä¸äºæµè§å¨ä»ç¶æ¯æå®ï¼ä½ä¹è®¸å·²ä»ç¸å ³ç web æ åä¸ç§»é¤ï¼ä¹è®¸æ£åå¤ç§»é¤æåºäºå ¼å®¹æ§èä¿çã请尽éä¸è¦ä½¿ç¨è¯¥ç¹æ§ï¼å¹¶æ´æ°ç°æç代ç ï¼åè§æ¬é¡µé¢åºé¨çå ¼å®¹æ§è¡¨æ ¼ä»¥æå¯¼ä½ ä½åºå³å®ã请注æï¼è¯¥ç¹æ§éæ¶å¯è½æ æ³æ£å¸¸å·¥ä½ã
夿³¨ï¼ å¨ä¸¥æ ¼æ¨¡å¼ä¸è®¿é® arguments.callee
ä¼æåº TypeError
ãè¥ä¸ä¸ªå½æ°å¿
é¡»å¼ç¨èªèº«ï¼è¯·ä¸ºå½æ°è¡¨è¾¾å¼å½åï¼æä½¿ç¨å½æ°å£°æã
arguments.callee
æ°æ®å±æ§å
å« arguments æå±çå½åæ£å¨æ§è¡ç彿°ã
对å½åæ£å¨æ§è¡ç彿°çå¼ç¨ã
å¯å æ¯ å¯æä¸¾ å¦ å¯é ç½® æ¯å¤æ³¨ï¼ callee
æ¯ä»
åå¨äºå
·æç®ååæ°çéä¸¥æ ¼å½æ°ï¼å¨è¿ç§æ
åµä¸ arguments
å¯¹è±¡ä¹æ¯èªå¨åæ¥çï¼çæ°æ®å±æ§ãå¦åï¼å®æ¯ä¸ä¸ªè®¿é®å¨å±æ§ï¼å
¶ getter å setter é½ä¼æåº TypeError
ã
callee
æ¯ arguments
对象çä¸ä¸ªå±æ§ãå®å¯ä»¥ç¨äºå¼ç¨æä¸ªå½æ°ç彿°ä½å
å½åæ£å¨æ§è¡ç彿°ãè¿å¨å½æ°çåç§°æªç¥æ¶å¾æç¨ï¼ä¾å¦å¨æ²¡æåç§°ç彿°è¡¨è¾¾å¼ï¼ä¹ç§°ä¸ºâå¿å彿°âï¼å
ã
ï¼ä»¥ä¸å 容大é¨åæ¹ç¼èª olliej å¨ Stack Overflow ä¸çåçï¼
æ©æçæ¬ç JavaScript ä¸å 许使ç¨å ·å彿°è¡¨è¾¾å¼ï¼åºäºè¿æ ·çåå ï¼ä½ ä¸è½å建éå½å½æ°è¡¨è¾¾å¼ã
ä¾å¦ï¼ä»¥ä¸è¯æ³æ¯ææçï¼
function factorial(n) {
return n <= 1 ? 1 : factorial(n - 1) * n;
}
[1, 2, 3, 4, 5].map(factorial);
使¯ï¼
[1, 2, 3, 4, 5].map(function (n) {
return n <= 1 ? 1 : /* è¿é该æä¹åï¼*/ (n - 1) * n;
});
è¿ä¸ªå°±ä¸è¡ã为äºè§£å³è¿ä¸ªé®é¢ï¼arguments.callee
被添å äºè¿æ¥ãç¶åä½ å¯ä»¥è¿ä¹åï¼
[1, 2, 3, 4, 5].map(function (n) {
return n <= 1 ? 1 : arguments.callee(n - 1) * n;
});
ç¶èï¼arguments.callee
ç设计åå¨å¾å¤é®é¢ã第ä¸ä¸ªé®é¢æ¯éå½è°ç¨ä¼å¾å°ä¸åç this
å¼ãä¾å¦ï¼
const global = this;
const sillyFunction = function (recursed) {
if (this !== global) {
console.log("this æ¯", this);
} else {
console.log("this æ¯ global");
}
if (!recursed) {
return arguments.callee(true);
}
};
sillyFunction();
// this æ¯ global
// this æ¯ [object Arguments]
æ¤å¤ï¼arguments.callee
çå¼ç¨ä½¿å¾å¨ä¸è¬æ
åµä¸æ æ³å®ç°å
èåå°¾éå½ä¼åãï¼ä½ å¯ä»¥éè¿è¿½è¸ªä¸ªå«çä¾åçæ¹æ³æ¥å®ç°å®ï¼ä½å³ä½¿æ¯æå¥½ç代ç 乿¯æ¬¡ä¼é项ï¼å 为åäºæ¬æ¥æ¯ä¸éè¦çæ£æ¥ãï¼
ECMAScript 3 éè¿å è®¸å ·å彿°è¡¨è¾¾å¼è§£å³äºè¿äºé®é¢ãä¾å¦ï¼
[1, 2, 3, 4, 5].map(function factorial(n) {
return n <= 1 ? 1 : factorial(n - 1) * n;
});
è¿æå¾å¤å¥½å¤ï¼
ä¸¥æ ¼æ¨¡å¼ç¦ç¨äºå
¶ä»æ³é²å æ ä¿¡æ¯ç屿§ï¼æ¯å¦å½æ°ç caller
屿§ãè¿æ¯å ä¸ºæ£æ¥è°ç¨å æ æä¸ä¸ªé大影åï¼å®ä½¿å¤§éçä¼ååå¾ä¸åå¯è½ï¼æè
å徿´å å°é¾ãæ¯å¦ï¼å¦æä½ ä¸è½ä¿è¯ä¸ä¸ªå½æ° f
ä¸ä¼è°ç¨ä¸ä¸ªæªç¥å½æ°ï¼é£å°±æ æ³å
èä¼å f
ã
function f(a, b, c, d, e) {
return a ? b * c : d * e;
}
妿 JavaScript è§£éå¨ä¸è½ä¿è¯æææä¾çåæ°å¨è¢«è°ç¨æ¶é½æ¯æ°åï¼é£ä¹å®éè¦å¨å è代ç ä¹åæå ¥å¯¹ææåæ°çæ£æ¥ï¼å¦åæ æ³å èè¯¥å½æ°ãè¿æå³çä»»ä½å¯è½å¾®ä¸è¶³éçå èè°ç¨çå°æ¹é½ä¼ç§¯ç´¯å¤§éçå®å«ãç°å¨ï¼å¨è¿ä¸ªç¹æ®ä¾åä¸ï¼æºè½çè§£éå¨åºè¯¥è½éææ£æ¥èä½¿å ¶æ´ä¼ï¼ä¸ä¸ä¼æ£æ¥ä»»ä½æ²¡æä½¿ç¨å°çå¼ãç¶èå¨è®¸å¤çæ åµä¸è¿æ¯ä¸å¯è½çï¼å èæ æ³è¿è¡å èä¼åã
ç¤ºä¾ å¨å¿åéå½å½æ°ä¸ä½¿ç¨ arguments.calleeéå½å½æ°å¿
é¡»è½å¤å¼ç¨å®æ¬èº«ãé常ï¼å½æ°éè¿èªå·±çååè°ç¨èªå·±ãç¶èï¼å¿å彿°ï¼éè¿å½æ°è¡¨è¾¾å¼æè
Function
æé 彿°åå»ºï¼æ²¡æåç§°ãå æ¤å¦ææ²¡æå¯è®¿é®çåéæåè¯¥å½æ°ï¼å¯ä¸è½å¼ç¨å®èªèº«çæ¹å¼å°±æ¯éè¿ arguments.callee
ã
ä¸é¢ç示ä¾å®ä¹äºä¸ä¸ªå½æ°ï¼è¯¥å½æ°åå®ä¹å¹¶è¿åäºä¸ä¸ªé¶ä¹å½æ°ã该示ä¾å¹¶ä¸å®ç¨ï¼ä¸å ä¹æææ åµä¸é½è½ç¨å ·å彿°è¡¨è¾¾å¼å®ç°åæ ·ç»æã
function create() {
return function (n) {
if (n <= 1) {
return 1;
}
return n * arguments.callee(n - 1);
};
}
const result = create()(5); // è¿å 120ï¼5 * 4 * 3 * 2 * 1ï¼
ä½¿ç¨ Y ç»ååçå¿å彿°éå½
è½ç¶å½æ°è¡¨è¾¾å¼ç°å¨å¯ä»¥è¢«å½åï¼ä½ç®å¤´å½æ°å§ç»æ¯å¿åçï¼è¿æå³çå®ä»¬æ æ³å¨æ²¡æè¢«èµå¼ç»åéçæ åµä¸å¼ç¨èªèº«ã幸è¿çæ¯ï¼å¨ Lambda æ¼ç®ä¸æä¸ä¸ªé常好çè§£å³æ¹æ¡ï¼å®å 许ä¸ä¸ªå½æ°æ¢æ¯å¿åç忝èªå¼ç¨çãè¿ä¸ªææ¯è¢«ç§°ä¸º Y ç»ååãå¨è¿éæä»¬ä¸ä¼è§£é宿¯å¦ä½å·¥ä½çï¼èä» ä»ç»å¦ä½ä½¿ç¨ã
// Y ç»ååï¼å·¥å
·å½æ°ï¼
const Y = (hof) => ((x) => x(x))((x) => hof((y) => x(x)(y)));
console.log(
[1, 2, 3, 4, 5].map(
// å°é«é¶å½æ°å
è£
å¨ Y ç»ååä¸
// âfactorialâ䏿¯å½æ°çåç§°ï¼å®æ¯ä½ä¸ºåæ°å¼å
¥ç
Y((factorial) => (n) => (n <= 1 ? 1 : factorial(n - 1) * n)),
),
);
// [ 1, 2, 6, 24, 120 ]
夿³¨ï¼ æ¤æ¹æ³ä¸ºæ¯ä¸æ¬¡è¿ä»£å建ä¸ä¸ªæ°çéå ï¼è¿å¯è½ä¼æ¾èå¢å å åç使ç¨éãè¿éåªæ¯ä¸ºäºæ¼ç¤ºè¿ç§å¯è½æ§ï¼ä½åºè¯¥å¨ç产ç¯å¢ä¸é¿å ã请æ¹ç¨ä¸´æ¶åéæå ·å彿°è¡¨è¾¾å¼ã
è§è æµè§å¨å ¼å®¹æ§ åè§RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4