Function
åºçº¿
广æ³å¯ç¨
*
èª 2015å¹´7æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
* æ¤ç¹æ§çæäºé¨åçæ¯æç¨åº¦å¯è½ææä¸åã
Function 对象æä¾äºç¨äºå¤ç彿°çæ¹æ³ãå¨ JavaScript ä¸ï¼æ¯ä¸ªå½æ°å®é
ä¸é½æ¯ä¸ä¸ª Function 对象ã
æé 彿°
Function()-
å建ä¸ä¸ªæ°ç
Function对象ãç´æ¥è°ç¨æ¤æé 彿°å¯ä»¥å¨æåå»ºå½æ°ï¼ä½ä¼éå°åeval()类似çå®å ¨é®é¢åï¼ç¸å¯¹è¾å°çï¼æ§è½é®é¢ãç¶èï¼ä¸eval()ä¸åçæ¯ï¼Functionæé 彿°å建ç彿°åªè½å¨å ¨å±ä½ç¨åä¸è¿è¡ã
å®ä¾å±æ§
以ä¸å±æ§å®ä¹å¨ Function.prototype ä¸ï¼å¹¶ä¸è¢«ææ Function å®ä¾å
±äº«ã
Function.prototype.arguments-
è¡¨ç¤ºä¼ éç»è¯¥å½æ°çåæ°ã对äºä¸¥æ ¼æ¨¡å¼ãç®å¤´å½æ°ã弿¥å½æ°åçæå¨å½æ°ï¼è®¿é®
arguments屿§ä¼æåºTypeErrorå¼å¸¸ã请æ¹ä¸ºå¨å½æ°éå å 使ç¨arguments对象ã Function.prototype.caller-
表示è°ç¨è¯¥å½æ°ç彿°ã对äºä¸¥æ ¼æ¨¡å¼ãç®å¤´å½æ°ã弿¥å½æ°åçæå¨å½æ°ï¼è®¿é®
caller屿§ä¼æåºTypeErrorå¼å¸¸ã Function.prototype.constructor-
å建å®ä¾å¯¹è±¡çæé 彿°ã对äº
Functionå®ä¾æ¥è¯´ï¼åå§å¼æ¯Functionæé 彿°ã
以ä¸å±æ§æ¯æ¯ä¸ª Function å®ä¾çèªæå±æ§ã
displayNameå¯é-
彿°çæ¾ç¤ºåç§°ã
length-
æå®å½æ°ææçåæ°ä¸ªæ°ã
name-
彿°çåç§°ã
prototype-
å¨ä½¿ç¨
functionä½ä¸ºæé 彿°ä¸newè¿ç®ç¬¦ä¸èµ·ä½¿ç¨æ¶ï¼ç¨ä½æ°å¯¹è±¡çååã
å®ä¾æ¹æ³
Function.prototype.apply()-
使ç¨ç»å®ç
thiså¼åå¯éçåæ°æ°ç»ï¼æç±»æ°ç»å¯¹è±¡ï¼ä½ä¸ºåæ°æ¥è°ç¨ä¸ä¸ªå½æ°ã Function.prototype.bind()-
å建ä¸ä¸ªæ°ç彿°ï¼å¨è°ç¨æ¶ï¼å ¶
thiså ³é®å被设置为æä¾çå¼ï¼å¯éå°å¨è°ç¨æ°å½æ°æ¶å¨æä¾çåæ°ä¹åå ä¸ä¸ç³»åç»å®çåæ°ã Function.prototype.call()-
使ç¨ç»å®ç
thiså¼åå¯éåæ°è°ç¨ä¸ä¸ªå½æ°ã Function.prototype.toString()-
è¿åè¡¨ç¤ºå½æ°æºä»£ç çå符串ãéåäº
Object.prototype.toStringæ¹æ³ã Function.prototype[Symbol.hasInstance]()-
æå®ç¡®å®æé 彿°æ¯å¦å°å¯¹è±¡è¯å«ä¸ºå ¶å®ä¾çé»è®¤è¿ç¨ãç±
instanceofè¿ç®ç¬¦è°ç¨ã
示ä¾
>Function æé 彿°ä¸å½æ°å£°æä¹é´çä¸å
ç± Function æé 彿°å建ç彿°ä¸ä¼å建å½åç¯å¢çéå
ï¼å®ä»¬æ»æ¯è¢«å建äºå
¨å±ç¯å¢ï¼å æ¤å¨è¿è¡æ¶å®ä»¬åªè½è®¿é®å
¨å±åéåèªå·±çå±é¨åéï¼ä¸è½è®¿é®å®ä»¬è¢« Function æé 彿°åå»ºæ¶æå¨çä½ç¨åçåéãè¿ä¸ç¹ä¸ä½¿ç¨ eval() æ§è¡åå»ºå½æ°ç代ç ä¸åã
// ä½¿ç¨ `var` å建ä¸ä¸ªå
¨å±å±æ§
var x = 10;
function createFunction1() {
const x = 20;
return new Function("return x;"); // è¿ä¸ª `x` æçæ¯å
¨å± `x`
}
function createFunction2() {
const x = 20;
function f() {
return x; // è¿ä¸ª `x` æçæ¯ä¸é¢çå±é¨ `x`
}
return f;
}
const f1 = createFunction1();
console.log(f1()); // 10
const f2 = createFunction2();
console.log(f2()); // 20
è½ç¶è¿æ®µä»£ç å¯ä»¥å¨æµè§å¨ä¸æ£å¸¸è¿è¡ï¼ä½å¨ Node.js ä¸ f1() ä¼äº§çä¸ä¸ªâæ¾ä¸å°åé xâç ReferenceErrorãè¿æ¯å ä¸ºå¨ Node ä¸é¡¶çº§ä½ç¨å䏿¯å
¨å±ä½ç¨åï¼è x å
¶å®æ¯å¨å½å模åçä½ç¨åä¹ä¸ã
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification> # sec-function-objects> |