Baseline Widely available *
ä¸è¬æ¥è¯´ï¼ä¸ä¸ªå½æ°æ¯å¯ä»¥éè¿å¤é¨ä»£ç è°ç¨çä¸ä¸ªâåç¨åºâï¼æå¨éå½çæ
åµä¸ç±å
é¨å½æ°è°ç¨ï¼ãåç¨åºæ¬èº«ä¸æ ·ï¼ä¸ä¸ªå½æ°ç±ç§°ä¸ºå½æ°ä½çä¸ç³»åè¯å¥ç»æãå¼å¯ä»¥ä¼ éç»ä¸ä¸ªå½æ°ï¼å½æ°å°è¿åä¸ä¸ªå¼ãå¨ JavaScript ä¸ï¼å½æ°æ¯å¤´ç (first-class)对象ï¼å 为å®ä»¬å¯ä»¥åä»»ä½å
¶ä»å¯¹è±¡ä¸æ ·å
·æå±æ§åæ¹æ³ãå®ä»¬ä¸å
¶ä»å¯¹è±¡çåºå«å¨äºå½æ°å¯ä»¥è¢«è°ç¨ãç®èè¨ä¹ï¼å®ä»¬æ¯Function
对象ã
æå ³æ´å¤ç¤ºä¾å说æï¼è¯·åé æå ³å½æ°ç JavaScript æåã
æè¿°å¨ JavaScript ä¸ï¼æ¯ä¸ªå½æ°å
¶å®é½æ¯ä¸ä¸ªFunction
å¯¹è±¡ãæ¥çFunction
页é¢äºè§£å
¶
屿§åæ¹æ³ã
妿ä¸ä¸ªå½æ°ä¸æ²¡æä½¿ç¨ return è¯å¥ï¼åå®é»è®¤è¿åundefined
ãè¦æ³è¿åä¸ä¸ªç¹å®çå¼ï¼å彿°å¿
é¡»ä½¿ç¨ return
è¯å¥æ¥æå®ä¸ä¸ªè¦è¿åçå¼ã(使ç¨newå
³é®åè°ç¨ä¸ä¸ªæé 彿°é¤å¤)ã
è°ç¨å½æ°æ¶ï¼ä¼ éç»å½æ°çå¼è¢«ç§°ä¸ºå½æ°çå®åï¼å¼ä¼ éï¼ï¼å¯¹åºä½ç½®ç彿°åæ°åå«ä½å½¢åã妿å®åæ¯ä¸ä¸ªå å«åå§å¼ (æ°åï¼å符串ï¼å¸å°å¼) çåéï¼åå°±ç®å½æ°å¨å 鍿¹åäºå¯¹åºå½¢åçå¼ï¼è¿ååï¼è¯¥å®ååéçå¼ä¹ä¸ä¼æ¹åã妿å®åæ¯ä¸ä¸ªå¯¹è±¡å¼ç¨ï¼å对åºå½¢åä¼å该å®åæååä¸ä¸ªå¯¹è±¡ãåå¦å½æ°å¨å 鍿¹åäºå¯¹åºå½¢åçå¼ï¼è¿ååï¼å®åæåç对象çå¼ä¹ä¼æ¹åï¼
/* å®ä¹å½æ° myFunc */
function myFunc(theObject) {
//å®å mycar åå½¢å theObject æååä¸ä¸ªå¯¹è±¡ã
theObject.brand = "Toyota";
}
/*
* å®ä¹åé mycar;
* å建并åå§åä¸ä¸ªå¯¹è±¡;
* å°å¯¹è±¡çå¼ç¨èµå¼ç»åé mycar
*/
var mycar = {
brand: "Honda",
model: "Accord",
year: 1998,
};
/* å¼¹åº 'Honda' */
window.alert(mycar.brand);
/* å°å¯¹è±¡å¼ç¨ä¼ ç»å½æ° */
myFunc(mycar);
/*
* å¼¹åº 'Toyota',对象ç屿§å·²è¢«ä¿®æ¹ã
*/
console.log(mycar.brand);
å¨å½æ°æ§è¡æ¶ï¼this
å
³é®åå¹¶ä¸ä¼æåæ£å¨è¿è¡ç彿°æ¬èº«ï¼èæ¯æåè°ç¨è¯¥å½æ°ç对象ãæä»¥ï¼å¦æä½ æ³å¨å½æ°å
é¨è·å彿°èªèº«çå¼ç¨ï¼åªè½ä½¿ç¨å½æ°åæè
使ç¨arguments.callee屿§ (**ä¸¥æ ¼æ¨¡å¼**ä¸ä¸å¯ç¨)ï¼å¦æè¯¥å½æ°æ¯ä¸ä¸ªå¿å彿°ï¼åä½ åªè½ä½¿ç¨åè
ã
å®ä¹å½æ°æå¤ç§æ¹æ³ï¼
彿°å£°æ (彿°è¯å¥)æä¸ä¸ªç¹æ®çè¯æ³æ¥å£°æå½æ° (æ¥ç彿°è¯å¥äºè§£è¯¦æ )ï¼
function name([param[, param[, ... param]]]) { statements }
name
彿°åã
param
ä¼ éç»å½æ°çåæ°çåç§°ã
statements
ç»æå½æ°ä½ç声æè¯å¥ã
function
expression)
彿°è¡¨è¾¾å¼å彿°å£°æé常ç¸ä¼¼ï¼å®ä»¬çè³æç¸åçè¯æ³ï¼æ¥ç彿°è¡¨è¾¾å¼äºè§£è¯¦æ ï¼ãä¸ä¸ªå½æ°è¡¨è¾¾å¼å¯è½æ¯ä¸ä¸ªæ´å¤§ç表达å¼çä¸é¨åãå¯ä»¥å®ä¹å½æ°âååâï¼ä¾å¦å¯ä»¥å¨è°ç¨å æ æ¶ä½¿ç¨ï¼æè 使ç¨âå¿åâ彿°ã彿°è¡¨è¾¾å¼ä¸ä¼æåï¼æä»¥ä¸è½å¨å®ä¹ä¹åè°ç¨ã
var myFunction = function name([param[, param[, ... param]]]) { statements }
name
彿°åï¼å¯ä»¥çç¥ãå½çç¥å½æ°åçæ¶åï¼è¯¥å½æ°å°±æä¸ºäºå¿å彿°ã
param
ä¼ éç»å½æ°çåæ°çåç§°ã
statements
ç»æå½æ°ä½ç声æè¯å¥ã
ä¸é¢æ¯å¿å彿°çä¸ä¸ªä¾åï¼å½æ°æ²¡æååï¼ï¼
var myFunction = function () {
// statements
};
ä¹å¯ä»¥å¨å®ä¹æ¶ä¸ºå½æ°å½åï¼
var myFunction = function namedFunction() {
// statements
};
å ·å彿°è¡¨è¾¾å¼ç好夿¯å½æä»¬éå°é误æ¶ï¼å æ è·è¸ªä¼æ¾ç¤ºå½æ°åï¼å®¹æå¯»æ¾é误ã
å¯ä»¥çå°ï¼ä¸é¢ç两个ä¾åé½ä¸ä»¥ function å¼å¤´ãä¸ä»¥ function å¼å¤´ç彿°è¯å¥å°±æ¯å½æ°è¡¨è¾¾å¼å®ä¹ã
å½å½æ°åªä½¿ç¨ä¸æ¬¡æ¶ï¼é常使ç¨IIFE (Immediately Invokable Function Expressions)ã
(function () {
statements;
})();
IIFEæ¯å¨å½æ°å£°æåç«å³è°ç¨ç彿°è¡¨è¾¾å¼ã
彿°çæå¨å£°æ (function*
è¯å¥)
彿°å£°ææä¸ç§ç¹æ®çè¯æ³ (详æ
请æ¥é
function* statement
)ï¼
function* name([param[, param[, ...param]]]) { statements }
name
彿°åç§°ã
param
ä¼ éç»å½æ°çåæ°çåç§°ã
statements
ç»æå½æ°ä½ç声æè¯å¥ã
function*
表达å¼)
æé 彿°è¡¨è¾¾å¼å彿°å£°æç±»ä¼¼ï¼å¹¶ä¸æçç¸åçè¯æ³ (详æ
请æ¥é
function* expression
):
function* [name]([param] [, param] [..., param]) { statements }
name
彿°åç§°ã彿°åå¯ä»¥è¢«çç¥ï¼å¨è¿ç§æ åµä¸è¯¥å½æ°å°åæå¿å彿°ã
param
ä¼ éç»å½æ°çåæ°çåç§°ã
statements
ç»æå½æ°ä½ç声æè¯å¥ã
ç®å¤´å½æ°è¡¨è¾¾å¼æçæ´ççè¯æ³ï¼å¹¶å¨è¯æ±æ¹é¢ç»åè¿ä¸ªå¼ (详æ 请æ¥é arrow functions ):
([param] [, param]) => { statements } param => expression
param
åæ°åç§°ãé¶åæ°éè¦ç¨ () 表示ãåªæä¸ä¸ªåæ°æ¶ä¸éè¦æ¬å·ã(ä¾å¦ foo => 1
)
statements or expression
å¤ä¸ªå£°æ statements éè¦ç¨å¤§æ¬å·æ¬èµ·æ¥ï¼èåä¸ªè¡¨è¾¾å¼æ¶åä¸éè¦ãè¡¨è¾¾å¼ expression 乿¯è¯¥å½æ°çéå¼è¿åå¼ã
Function
æé 彿°
夿³¨ï¼ 䏿¨èä½¿ç¨ Function
æé 彿°åå»ºå½æ°ï¼å 为å®éè¦ç彿°ä½ä½ä¸ºå符串å¯è½ä¼é»æ¢ä¸äº JS 弿ä¼åï¼ä¹ä¼å¼èµ·å
¶ä»é®é¢ã
ææå
¶ä»å¯¹è±¡ï¼Function
对象å¯ä»¥ç¨ new æä½ç¬¦å建ï¼
new Function (arg1, arg2, ... argN, functionBody)
arg1, arg2, ... argN
彿°ä½¿ç¨é¶ä¸ªæå¤ä¸ªåç§°ä½ä¸ºæ£å¼çåæ°åç§°ãæ¯ä¸ä¸ªå¿ é¡»æ¯ä¸ä¸ªç¬¦åææç JavaScript æ è¯ç¬¦è§åçå符串æç¨éå·åéçå符串å表ï¼ä¾å¦âxâ,âtheValueâæâa,bâã
functionBody
ä¸ä¸ªææç彿°å®ä¹çï¼å å« JavaScript 声æè¯å¥çå符串ã
æ Function çæé 彿°å½ä½å½æ°ä¸æ ·è°ç¨ (ä¸ä½¿ç¨ new æä½ç¬¦) çææä¸ä½ä¸º Function çæé 彿°è°ç¨ä¸æ ·ã
çæå¨å½æ°çæé 彿°å¤æ³¨ï¼ GeneratorFunction
䏿¯ä¸ä¸ªå
¨å±å¯¹è±¡ï¼ä½å¯ä»¥ä»æé 彿°å®ä¾åå¾ã(详æ
请æ¥é
çæå¨å½æ°).
夿³¨ï¼ 䏿¨èä½¿ç¨æé å¨å½æ°çæé 彿° (GeneratorFunction
constructor) åå»ºå½æ°ï¼å 为å®éè¦ç彿°ä½ä½ä¸ºå符串å¯è½ä¼é»æ¢ä¸äº JS 弿ä¼åï¼ä¹ä¼å¼èµ·å
¶ä»é®é¢ã
ææå
¶ä»å¯¹è±¡ï¼GeneratorFunction
对象å¯ä»¥ç¨ new æä½ç¬¦å建ï¼
new GeneratorFunction (arg1, arg2, ... argN, functionBody)
arg1, arg2, ... argN
彿°ä½¿ç¨é¶ä¸ªæå¤ä¸ªåç§°ä½ä¸ºæ£å¼çåæ°åç§°ãæ¯ä¸ä¸ªå¿ é¡»æ¯ä¸ä¸ªç¬¦åææç JavaScript æ è¯ç¬¦è§åçå符串æç¨éå·åéçå符串å表ï¼ä¾å¦âxâ,âtheValueâæâa,bâã
functionBody
ä¸ä¸ªææç彿°å®ä¹çï¼å å« JavaScript 声æè¯å¥çå符串ã
æ Function çæé 彿°å½ä½å½æ°ä¸æ ·è°ç¨ (ä¸ä½¿ç¨ new æä½ç¬¦) çææä¸ä½ä¸º Function çæé 彿°è°ç¨ä¸æ ·ã
彿°åæ° é»è®¤åæ°å¦ææ²¡æå¼æä¼ å ¥äºæªå®ä¹çå¼ï¼é»è®¤å½æ°åæ°å 许形å¼åæ°ä½¿ç¨é»è®¤å¼åå§åãåè§ï¼é»è®¤åæ°ã
å©ä½åæ°å©ä½åæ°è¯æ³å è®¸å°æ°éä¸éçåæ°æè¿°æä¸ä¸ªæ°ç»ãåè§ï¼å©ä½åæ°ã
arguments
对象
ä½ å¯ä»¥åé
å¨å½æ°é使ç¨arguments
对象ç彿°åæ°ãåè§ï¼argumentsã
arguments
: ä¸ä¸ªå
å«äºä¼ éç»å½åæ§è¡å½æ°åæ°çç±»ä¼¼äºæ°ç»ç对象ãarguments.callee
å·²å¼ç¨ : å½åæ£å¨æ§è¡ç彿°ãarguments.caller
å·²å¼ç¨ : è°ç¨å½åæ§è¡å½æ°ç彿°ãarguments.length
: ä¼ ç»å½æ°çåæ°çæ°ç®ãä½ å¯ä»¥å¨æ¯ææ·»å æ°å±æ§ç任使 åçå 置对象æç¨æ·å®ä¹ç对象å å®ä¹ getter(è®¿é®æ¹æ³) å setter(è®¾ç½®æ¹æ³)ã使ç¨å¯¹è±¡åé¢éè¯æ³å®ä¹ getters å setters æ¹æ³ã
彿¥æ¾æä¸ªå¯¹è±¡å±æ§æ¶ï¼è¯¥å¯¹è±¡å±æ§å°ä¼ä¸è¢«è°ç¨å½æ°ç»å®ã
å½è¯å¾è®¾ç½®è¯¥å±æ§æ¶ï¼å¯¹è±¡å±æ§ä¸è¢«è°ç¨å½æ°ç»å®ã
ä» ECMAScript 6 å¼å§ï¼ä½ å¯ä»¥ç¨æ´ççè¯æ³å®ä¹èªå·±çæ¹æ³ï¼ç±»ä¼¼äº getters å settersã详æ 请æ¥é method definitions .
var obj = {
foo() {},
bar() {},
};
æé 彿° vs 彿°å£°æ vs 彿°è¡¨è¾¾å¼
对æ¯ä¸é¢çä¾åï¼
ä¸ä¸ªç¨Function
æé 彿°å®ä¹ç彿°ï¼è¢«èµå¼ç»åé multiplyï¼
var multiply = new Function("x", "y", "return x * y");
ä¸ä¸ªå为multiply
ç彿°å£°æï¼
function multiply(x, y) {
return x * y;
} // 没æåå·
ä¸ä¸ªå¿å彿°ç彿°è¡¨è¾¾å¼ï¼è¢«èµå¼ç»åémultiply
ï¼
var multiply = function (x, y) {
return x * y;
};
ä¸ä¸ªå½å为func_named
ç彿°ç彿°è¡¨è¾¾å¼ï¼è¢«èµå¼ç»åémultiply
ï¼
var multiply = function func_name(x, y) {
return x * y;
};
å·®å«
è½ç¶æä¸äºç»å¾®çå·®å«ï¼ä½æèµ·çä½ç¨é½å·®ä¸å¤ï¼
彿°åå彿°çåéåå¨çå·®å«ã彿°åä¸è½è¢«æ¹åï¼ä½å½æ°çåéå´è½å¤è¢«ååé ã彿°ååªè½å¨å½æ°ä½å 使ç¨ãåè¥å¨å½æ°ä½å¤ä½¿ç¨å½æ°åå°ä¼å¯¼è´é误ï¼å¦æå½æ°ä¹åæ¯éè¿ä¸ä¸ª var è¯å¥å£°æç忝 undefinedï¼ãä¾å¦ï¼
var y = function x() {};
alert(x); // throws an error
å½å½æ°æ¯éè¿ Function
's toString method被åºååæ¶ï¼å½æ°ååæ ·ä¹ä¼åºç°ã
å¦ä¸æ¹é¢ï¼è¢«å½æ°èµå¼çåéä» ä» åéäºå®çä½ç¨åï¼è¯¥ä½ç¨åç¡®ä¿å å«çè¯¥å½æ°è¢«å£°ææ¶çä½ç¨åã
æ£å¦ç¬¬å个ä¾åæå±ç¤ºç飿 ·ï¼å½æ°åä¸è¢«å½æ°èµå¼çå鿝ä¸ç¸åçãå½¼æ¤ä¹é´æ²¡æå ³ç³»ã彿°å£°æåæ¶ä¹å建äºä¸ä¸ªå彿°åç¸åçåéãå æ¤ï¼ä¸å½æ°è¡¨è¾¾å¼å®ä¹ä¸åï¼ä»¥å½æ°å£°æå®ä¹ç彿°è½å¤å¨å®ä»¬è¢«å®ä¹çä½ç¨åå éè¿å½æ°åè被访é®å°ï¼
使ç¨ç¨ 'new Function'å®ä¹ç彿°æ²¡æå½æ°åã
ç¶èï¼å¨ SpiderMonkey JavaScript 弿ä¸ï¼å
¶å½æ°çåºååå½¢å¼è¡¨ç°ç好å宿¥æä¸ä¸ªåå«"anonymous"çåç§°ä¸æ ·ãæ¯å¦ï¼ä½¿ç¨ alert(new Function())
è¾åºï¼
èå®é
ä¸å
¶å½æ°å¹¶æ²¡æåç§°ï¼anonymous
䏿¯ä¸ä¸ªå¯ä»¥å¨å½æ°å
被访é®å°çåéãä¾å¦ï¼ä¸é¢çä¾åå°ä¼å¯¼è´é误ï¼
var foo = new Function("alert(anonymous);");
foo();
åéè¿å½æ°è¡¨è¾¾å¼å®ä¹æè éè¿ Function æé 彿°å®ä¹ç彿°ä¸åï¼å½æ°å£°æå®ä¹ç彿°å¯ä»¥å¨å®è¢«å£°æä¹å使ç¨ã举个ä¾åï¼
foo(); // alerts FOO!
function foo() {
alert("FOO!");
}
彿°è¡¨è¾¾å¼å®ä¹ç彿°ç»§æ¿äºå½åçä½ç¨åãæ¢è¨ä¹ï¼å½æ°ææäºéå ãå¦ä¸æ¹é¢ï¼Function æé 彿°å®ä¹ç彿°ä¸ç»§æ¿ä»»ä½å ¨å±ä½ç¨å以å¤çä½ç¨å (é£äºææå½æ°é½ç»§æ¿ç)ã
éè¿å½æ°è¡¨è¾¾å¼å®ä¹ç彿°åéè¿å½æ°å£°æå®ä¹ç彿°åªä¼è¢«è§£æä¸æ¬¡ï¼è Function æé 彿°å®ä¹ç彿°å´ä¸åãä¹å°±æ¯è¯´ï¼æ¯æ¬¡æé 彿°è¢«è°ç¨ï¼ä¼ éç» Function æé 彿°ç彿°ä½å符串é½è¦è¢«è§£æä¸æ¬¡ãè½ç¶å½æ°è¡¨è¾¾å¼æ¯æ¬¡é½å建äºä¸ä¸ªéå
ï¼ä½å½æ°ä½ä¸ä¼è¢«éå¤è§£æï¼å æ¤å½æ°è¡¨è¾¾å¼ä»ç¶è¦å¿«äº"new Function(...)
"ãæä»¥ Function æé 彿°åºå°½å¯è½å°é¿å
使ç¨ã
æä¸ç¹åºè¯¥è¦æ³¨æçï¼å¨éè¿è§£æ Function æé 彿°å符串产çç彿°éï¼å åµç彿°è¡¨è¾¾å¼å彿°å£°æä¸ä¼è¢«éå¤è§£æãä¾å¦ï¼
var foo = new Function(
"var bar = 'FOO!';\nreturn(function() {\n\talert(bar);\n});",
)();
foo(); // 彿°ä½å符串"function() {\n\talert(bar);\n}"çè¿ä¸é¨åä¸ä¼è¢«éå¤è§£æã
彿°å£°æé常容æï¼ç»å¸¸æ¯æå¤å°ï¼è½¬æ¢ä¸ºå½æ°è¡¨è¾¾å¼ãå½å®ä¸åæ¯ä¸ä¸ªå½æ°å£°æï¼
var x = 0; // source element
if (x === 0) {
// source element
x = 10; // é source element
function boo() {} // é source element
}
function foo() {
// source element
var y = 20; // source element
function bar() {} // source element
while (y === 10) {
// source element
function blah() {} // é source element
y++; //é source element
}
}
示ä¾
// 彿°å£°æ
function foo() {}
// 彿°è¡¨è¾¾å¼
(function bar() {});
// 彿°è¡¨è¾¾å¼
x = function hello() {};
if (x) {
// 彿°è¡¨è¾¾å¼
function world() {}
}
// 彿°å£°æ
function a() {
// 彿°å£°æ
function b() {}
if (0) {
//彿°è¡¨è¾¾å¼
function c() {}
}
}
åçº§å½æ°
ä» ECMAScript 6 å¼å§ï¼å¨ä¸¥æ ¼æ¨¡å¼ä¸ï¼åéç彿°ä½ç¨å为è¿ä¸ªåãECMAScript 6 ä¹åä¸å»ºè®®åçº§å½æ°å¨ä¸¥æ ¼æ¨¡å¼ä¸ä½¿ç¨ã
"use strict";
function f() {
return 1;
}
{
function f() {
return 2;
}
}
f() === 1; // true
// f() === 2 in non-strict mode
éä¸¥æ ¼æ¨¡å¼ä¸çåçº§å½æ°
ä¸å¥è¯ï¼ä¸è¦ç¨ã
å¨éä¸¥æ ¼æ¨¡å¼ä¸ï¼åä¸ç彿°å£°æè¡¨ç°å¥æªãä¾å¦ï¼
if (shouldDefineZero) {
function zero() {
// DANGER: å
¼å®¹æ§é£é©
console.log("This is zero.");
}
}
ECMAScript 6 ä¸ï¼å¦æshouldDefineZero
æ¯ falseï¼åæ°¸è¿ä¸ä¼å®ä¹ zeroï¼å 为è¿ä¸ªåä»ä¸æ§è¡ãç¶èï¼è¿æ¯æ åçæ°çä¸é¨åãè¿æ¯åå²éçé®é¢ï¼æ 论è¿ä¸ªåæ¯å¦æ§è¡ï¼ä¸äºæµè§å¨ä¼å®ä¹ zeroã
å¨ä¸¥æ ¼æ¨¡å¼ ä¸ï¼æææ¯æ ECMAScript 6
çæµè§å¨ä»¥ç¸åçæ¹å¼å¤çï¼åªæå¨ shouldDefineZero 为 true
çæ
åµä¸å®ä¹ zero
ï¼å¹¶ä¸ä½ç¨ååªæ¯è¿ä¸ªåå
ã
ææ¡ä»¶å°å®ä¹ä¸ä¸ªå½æ°çä¸ä¸ªæ´å®å ¨çæ¹æ³æ¯æå½æ°è¡¨è¾¾å¼èµç»ä¸ä¸ªåéï¼
var zero;
if (0) {
zero = function () {
console.log("This is zero.");
};
}
ç¤ºä¾ è¿åæ ¼å¼åæ°å
ä¸é¢ç彿°è¿åä¸ä¸ªå符串ï¼å ¶ä¸å å«äºä¸ä¸ªæ ¼å¼åçã以ä¸ä¸ªç± 0 å¼å¤´å¹¶å¡«å çæ°åã
// è¿ä¸ªå½æ°è¿åä¸ä¸ªç± 0 å¼å¤´å¹¶å¡«å
çå符串
function padZeros(num, totalLen) {
var numStr = num.toString(); // ç¨å符串è¿åå¼è¿è¡åå§å
var numZeros = totalLen - numStr.length; // è®¡ç® zeros 顺åº
for (var i = 1; i <= numZeros; i++) {
numStr = "0" + numStr;
}
return numStr;
}
ä¸é¢çè¯å¥è°ç¨äº padZeros 彿°ï¼
var result;
result = padZeros(42, 4); // returns "0042"
result = padZeros(42, 2); // returns "42"
result = padZeros(5, 4); // returns "0005"
æ£æµå½æ°æ¯å¦åå¨
ä½ å¯ä»¥éè¿ typeof æä½ç¬¦æ£æµä¸ä¸ªå½æ°æ¯å¦åå¨ãå¨ä¸é¢çä¾åä¸ï¼ç¨ä¸ä¸ªæµè¯æ¥æ¼ç¤ºæ£æµ window 对象æ¯å¦æ¥æä¸ä¸ª noFunc 彿°ç屿§ã妿åå¨ï¼é£å°±ä½¿ç¨å®ï¼å¦åå°±éåå ¶ä»çä¸äºæä½ã
if ("function" === typeof window.noFunc) {
// use noFunc()
} else {
// do something else
}
注æå¨ if è¯å¥ä¸ï¼ä½¿ç¨äº noFunc çå¼ç¨ââå¨å½æ°åçå颿²¡ææ¬å·âï¼ï¼âï¼æä»¥å®é 彿°å¹¶æ²¡æè¢«è°ç¨ã
è§è æµè§å¨å ¼å®¹æ§ åé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