彿°æ¯ JavaScript ä¸çåºæ¬ç»ä»¶ä¹ä¸ãJavaScript ä¸ç彿°ç±»ä¼¼äºè¿ç¨ââä¸ç»æ§è¡ä»»å¡æè®¡ç®å¼çè¯å¥ãä½è¦æä¸ºå½æ°ï¼è¿ä¸ªè¿ç¨åºè¯¥æ¥åè¾å ¥å¹¶è¿åä¸è¾å ¥åå¨æäºææ¾å ³ç³»çè¾åºãè¦ä½¿ç¨ä¸ä¸ªå½æ°ï¼ä½ å¿ é¡»å°å ¶å®ä¹å¨ä½ 叿è°ç¨å®çä½ç¨åå ã
åè§ JavaScript 彿°ç详ç»åèç« èï¼ä»¥äºè§£è¯¦æ ã
å®ä¹å½æ° 彿°å£°æä¸ä¸ªå½æ°å®ä¹ï¼ä¹ç§°ä¸ºå½æ°å£°æï¼æå½æ°è¯å¥ï¼ç± function
å
³é®åï¼å¹¶è·é以ä¸é¨åç»æï¼
{ /* ⦠*/ }
ãä¾å¦ï¼ä»¥ä¸ç代ç å®ä¹äºä¸ä¸ªç®åçå为 square
ç彿°ï¼
function square(number) {
return number * number;
}
彿° square
æ¥æ¶ä¸ä¸ªå为 number
çåæ°ãè¿ä¸ªå½æ°åªæä¸ä¸ªè¯å¥ï¼å
¶è¡¨ç¤ºè¯¥å½æ°å°å½æ°çåæ°ï¼å³ number
ï¼èªä¹åè¿åã彿°ç return
è¯å¥æå®äºå½æ°çè¿åå¼ï¼number * number
ã
åæ°æ¬è´¨ä¸æ¯æå¼ä¼ éç»å½æ°çââå æ¤ï¼å³ä½¿å½æ°ä½ç代ç ä¸ºä¼ éç»å½æ°çåæ°èµäºæ°å¼ï¼è¿ä¸ªæ¹åä¹ä¸ä¼åæ å°å ¨å±æè°ç¨è¯¥å½æ°ç代ç ä¸ã
å¦æä½ å°å¯¹è±¡ä½ä¸ºåæ°ä¼ éï¼è彿°æ¹åäºè¿ä¸ªå¯¹è±¡ç屿§ï¼è¿æ ·çæ¹å坹彿°å¤é¨æ¯å¯è§çï¼å¦ä¸é¢çä¾åæç¤ºï¼
function myFunc(theObject) {
theObject.make = "Toyota";
}
const mycar = {
make: "Honda",
model: "Accord",
year: 1998,
};
console.log(mycar.make); // "Honda"
myFunc(mycar);
console.log(mycar.make); // "Toyota"
å¦æä½ å°æ°ç»ä½ä¸ºåæ°ä¼ éï¼è彿°æ¹åäºè¿ä¸ªæ°ç»çå¼ï¼è¿æ ·çæ¹å坹彿°å¤é¨ä¹åæ ·å¯è§ï¼å¦ä¸é¢çä¾åæç¤ºï¼
function myFunc(theArr) {
theArr[0] = 30;
}
const arr = [45];
console.log(arr[0]); // 45
myFunc(arr);
console.log(arr[0]); // 30
彿°è¡¨è¾¾å¼
è½ç¶ä¸é¢ç彿°å£°æå¨è¯æ³ä¸æ¯ä¸ä¸ªè¯å¥ï¼ä½å½æ°ä¹å¯ä»¥ç±å½æ°è¡¨è¾¾å¼å建ã
è¿æ ·ç彿°å¯ä»¥æ¯å¿åçï¼å®ä¸å¿
æä¸ä¸ªåç§°ãä¾å¦ï¼å½æ° square
ä¹å¯è¿æ ·æ¥å®ä¹ï¼
const square = function (number) {
return number * number;
};
console.log(square(4)); // 16
ç¶èï¼ä¹å¯ä»¥ä¸ºå½æ°è¡¨è¾¾å¼æä¾åç§°ï¼å¹¶ä¸å¯ä»¥ç¨äºå¨å½æ°å é¨ä»£æå ¶æ¬èº«ï¼æè å¨è°è¯å¨å æ è·è¸ªä¸è¯å«è¯¥å½æ°ï¼
const factorial = function fac(n) {
return n < 2 ? 1 : n * fac(n - 1);
};
console.log(factorial(3)); // 6
å½å°å½æ°ä½ä¸ºåæ°ä¼ éç»å¦ä¸ä¸ªå½æ°æ¶ï¼å½æ°è¡¨è¾¾å¼å¾æ¹ä¾¿ãä¸é¢çä¾åæ¼ç¤ºäºä¸ä¸ªå« map
ç彿°ï¼è¯¥å½æ°æ¥æ¶å½æ°ä½ä¸ºç¬¬ä¸ä¸ªåæ°ï¼æ¥æ¶æ°ç»ä½ä¸ºç¬¬äºä¸ªåæ°ï¼
function map(f, a) {
const result = new Array(a.length);
for (let i = 0; i < a.length; i++) {
result[i] = f(a[i]);
}
return result;
}
å¨ä»¥ä¸ä»£ç ä¸ï¼è¯¥å½æ°æ¥æ¶ç±å½æ°è¡¨è¾¾å¼å®ä¹ç彿°ï¼å¹¶å¯¹ä½ä¸ºç¬¬äºä¸ªåæ°æ¥æ¶çæ°ç»çæ¯ä¸ªå ç´ æ§è¡è¯¥å½æ°ï¼
function map(f, a) {
const result = new Array(a.length);
for (let i = 0; i < a.length; i++) {
result[i] = f(a[i]);
}
return result;
}
const cube = function (x) {
return x * x * x;
};
const numbers = [0, 1, 2, 5, 10];
console.log(map(cube, numbers)); // [0, 1, 8, 125, 1000]
å¨ JavaScript ä¸ï¼å¯ä»¥æ ¹æ®æ¡ä»¶æ¥å®ä¹ä¸ä¸ªå½æ°ãæ¯å¦ä¸é¢ç代ç ï¼å½ num
çäº 0
çæ¶åæä¼å®ä¹ myFunc
ï¼
let myFunc;
if (num === 0) {
myFunc = function (theObject) {
theObject.make = "Toyota";
};
}
é¤äºä¸è¿°çå®ä¹å½æ°æ¹æ³å¤ï¼ä½ ä¹å¯ä»¥å¨è¿è¡æ¶ç¨ Function
æé 彿°ä»ä¸ä¸ªå符串å建ä¸ä¸ªå½æ°ï¼å¾å eval()
彿°ã
å½ä¸ä¸ªå½æ°æ¯ä¸ä¸ªå¯¹è±¡ç屿§æ¶ï¼ç§°ä¹ä¸ºæ¹æ³ãäºè§£æ´å¤å ³äºå¯¹è±¡åæ¹æ³çç¥è¯ï¼è¯·é 读使ç¨å¯¹è±¡ã
è°ç¨å½æ°å®ä¹ç彿°å¹¶ä¸ä¼èªå¨æ§è¡å®ãå®ä¹äºå½æ°ä» ä» æ¯èµäºå½æ°ä»¥åç§°å¹¶æç¡®å½æ°è¢«è°ç¨æ¶è¯¥åäºä»ä¹ã
è°ç¨å½æ°æä¼ä»¥ç»å®çåæ°çæ£æ§è¡è¿äºå¨ä½ãä¾å¦ï¼ä¸æ¦ä½ å®ä¹äºå½æ° square
ï¼ä½ å¯ä»¥åè¿æ ·è°ç¨å®ï¼
ä¸è¿°è¯å¥ä½¿ç¨åæ° 5
æ¥è°ç¨å½æ°ã彿°æ§è¡å®å®çè¯å¥ä¼è¿åå¼ 25
ã
彿°ä¸å®è¦å¤äºè°ç¨å®ä»¬çä½ç¨åä¸ï¼ä½æ¯å½æ°ç声æå¯ä»¥è¢«æåï¼åºç°å¨è°ç¨è¯å¥ä¹åï¼ã彿°å£°æçèå´æ¯å£°æå®ç彿°ï¼æè ï¼å¦æå®æ¯å¨é¡¶å±å£°æçï¼å为æ´ä¸ªç¨åºï¼ä¹å ã
彿°çåæ°å¹¶ä¸å±éäºåç¬¦ä¸²ææ°åãä½ ä¹å¯ä»¥å°æ´ä¸ªå¯¹è±¡ä¼ éç»å½æ°ã彿° showProps()
ï¼å
¶å®ä¹åè§ä½¿ç¨å¯¹è±¡ï¼å°±æ¯ä¸ä¸ªå°å¯¹è±¡ä½ä¸ºåæ°ç示ä¾ã
彿°å¯ä»¥è°ç¨å ¶æ¬èº«ãä¾å¦ï¼ä¸é¢è¿ä¸ªå½æ°å°±æ¯ç¨éå½è®¡ç®é¶ä¹ï¼
function factorial(n) {
if (n === 0 || n === 1) {
return 1;
} else {
return n * factorial(n - 1);
}
}
ä½ å¯ä»¥è¿æ ·è®¡ç® 1
å° 5
çé¶ä¹ï¼
console.log(factorial(1)); // 1
console.log(factorial(2)); // 2
console.log(factorial(3)); // 6
console.log(factorial(4)); // 24
console.log(factorial(5)); // 120
è¿æå ¶ä»çæ¹å¼æ¥è°ç¨å½æ°ã常è§çä¸äºæ å½¢æ¯æäºå°æ¹éè¦å¨æè°ç¨å½æ°ï¼æè 彿°çå®åæ°éæ¯ååçï¼æè è°ç¨å½æ°çä¸ä¸æéè¦æå®ä¸ºå¨è¿è¡æ¶ç¡®å®çç¹å®å¯¹è±¡ã
æ¾ç¶ï¼å½æ°æ¬èº«å°±æ¯å¯¹è±¡ï¼å æ¤è¿äºå¯¹è±¡ä¹ææ¹æ³ï¼åè§ Function
对象ï¼ãcall()
å apply()
æ¹æ³å¯ç¨äºå®ç°è¿äºç®çã
èè以ä¸ç¤ºä¾ï¼
console.log(square(5)); // 25
function square(n) {
return n * n;
}
尽管 square()
彿°å¨å£°æä¹å被è°ç¨ï¼ä½æ¤ä»£ç çè¿è¡å¹¶æ²¡æä»»ä½é误ãè¿æ¯å 为 JavaScript è§£éå¨ä¼å°æ´ä¸ªå½æ°å£°ææåå°å½åä½ç¨åçé¡¶é¨ï¼å æ¤ä¸é¢ç代ç çä»·äºï¼
// ææå½æ°å£°æå®é
ä¸é½ä½äºä½ç¨åçé¡¶é¨
function square(n) {
return n * n;
}
console.log(square(5)); // 25
彿°æåä» éç¨äºå½æ°å£°æï¼èä¸éç¨äºå½æ°è¡¨è¾¾å¼ã以ä¸ä»£ç æ æ³è¿è¡ï¼
console.log(square(5)); // ReferenceError: Cannot access 'square' before initialization
const square = function (n) {
return n * n;
};
彿°ä½ç¨å
å¨å½æ°å å®ä¹çåéä¸è½å¨å½æ°ä¹å¤çä»»ä½å°æ¹è®¿é®ï¼å 为åéä» ä» å¨è¯¥å½æ°çä½ç¨åå å®ä¹ãç¸å¯¹åºçï¼ä¸ä¸ªå½æ°å¯ä»¥è®¿é®å®ä¹å¨å ¶èå´å çä»»ä½åéå彿°ã
æ¢è¨ä¹ï¼å®ä¹å¨å ¨å±åä¸ç彿°å¯ä»¥è®¿é®ææå®ä¹å¨å ¨å±åä¸çåéãå¨å¦ä¸ä¸ªå½æ°ä¸å®ä¹ç彿°ä¹å¯ä»¥è®¿é®å¨å ¶ç¶å½æ°ä¸å®ä¹çææåéåç¶å½æ°ææè®¿é®çä»»ä½å ¶ä»åéã
// ä¸é¢çåéå®ä¹å¨å
¨å±ä½ç¨åä¸
const num1 = 20;
const num2 = 3;
const name = "Chamakh";
// æ¤å½æ°å®ä¹å¨å
¨å±ä½ç¨åä¸
function multiply() {
return num1 * num2;
}
console.log(multiply()); // 60
// åµå¥å½æ°ç¤ºä¾
function getScore() {
const num1 = 2;
const num2 = 3;
function add() {
return `${name} çå¾å为 ${num1 + num2}`;
}
return add();
}
console.log(getScore()); // "Chamakh çå¾å为 5"
ä½ç¨åå彿°æ éå½
ä¸ä¸ªå½æ°å¯ä»¥æåå¹¶è°ç¨èªèº«ãæä¸ç§æ¹æ³å¯ä»¥è¾¾å°è¿ä¸ªç®çï¼
arguments.callee
ä¾å¦ï¼æèå¦ä¸ç彿°å®ä¹ï¼
const foo = function bar() {
// è¿éç¼åè¯å¥
};
å¨è¿ä¸ªå½æ°ä½å ï¼ä»¥ä¸çè¯å¥æ¯çä»·çï¼
bar()
arguments.callee()
foo()
è°ç¨èªèº«ç彿°æä»¬ç§°ä¹ä¸ºéå½å½æ°ãå¨æç§æä¹ä¸è¯´ï¼éå½è¿ä¼¼äºå¾ªç¯ã两è é½é夿§è¡ç¸åç代ç ï¼å¹¶ä¸ä¸¤è é½éè¦ä¸ä¸ªç»æ¢æ¡ä»¶ï¼é¿å æ é循ç¯ï¼æè å¨è¿ç§æ åµä¸æ´ç¡®åå°è¯´æ¯æ ééå½ï¼ã
ä¾å¦ï¼èè以ä¸ç循ç¯ï¼
let x = 0;
// âx < 10âæ¯å¾ªç¯æ¡ä»¶
while (x < 10) {
// åäºä»ä¹
x++;
}
å¯ä»¥è¢«è½¬åæä¸ä¸ªéå½å½æ°å£°æï¼ç¶åè°ç¨è¯¥å½æ°ï¼
function loop(x) {
// âx >= 10âæ¯éåºæ¡ä»¶ï¼çåäºâ!(x < 10)âï¼
if (x >= 10) {
return;
}
// åäºä»ä¹
loop(x + 1); // éå½è°ç¨
}
loop(0);
ä¸è¿ï¼æäºç®æ³å¹¶ä¸è½ç®åçç¨è¿ä»£æ¥å®ç°ãä¾å¦ï¼è·åæ ç»æï¼ä¾å¦ DOMï¼ä¸ææçèç¹æ¶ï¼ä½¿ç¨éå½å®ç°è¦å®¹æå¾å¤ï¼
function walkTree(node) {
if (node === null) {
return;
}
// 对èç¹åäºä»ä¹
for (let i = 0; i < node.childNodes.length; i++) {
walkTree(node.childNodes[i]);
}
}
è· loop
彿°ç¸æ¯ï¼è¿éæ¯ä¸ªéå½è°ç¨é½äº§çäºæ´å¤çéå½è°ç¨ã
å°éå½ç®æ³è½¬æ¢ä¸ºééå½ç®æ³æ¯å¯è½çï¼ä¸è¿é»è¾ä¸é叏伿´å 夿ï¼èä¸éè¦ä½¿ç¨æ ã
äºå®ä¸ï¼é彿¬èº«å°±ä½¿ç¨äºæ ï¼å½æ°æ ã类似æ çè¡ä¸ºå¯ä»¥å¨ä»¥ä¸ç¤ºä¾ä¸çå°ï¼
function foo(i) {
if (i < 0) {
return;
}
console.log(`å¼å§ï¼${i}`);
foo(i - 1);
console.log(`ç»æï¼${i}`);
}
foo(3);
// æå°ï¼
// å¼å§ï¼3
// å¼å§ï¼2
// å¼å§ï¼1
// å¼å§ï¼0
// ç»æï¼0
// ç»æï¼1
// ç»æï¼2
// ç»æï¼3
åµå¥å½æ°åéå
ä½ å¯ä»¥å¨ä¸ä¸ªå½æ°éé¢åµå¥å¦å¤ä¸ä¸ªå½æ°ãåµå¥ï¼å é¨ï¼å½æ°å¯¹å ¶å®¹å¨ï¼å¤é¨ï¼å½æ°æ¯ç§æçã
å®èªèº«ä¹å½¢æäºä¸ä¸ªéå ï¼closureï¼ãéå æ¯å¯ä»¥æ¥æç¬ç«åé以åç»å®äºè¿äºåéçç¯å¢ï¼âå°éâäºè¡¨è¾¾å¼ï¼ç表达å¼ï¼é常æ¯å½æ°ï¼ã
æ¢ç¶åµå¥å½æ°æ¯ä¸ä¸ªéå ï¼å°±æå³çä¸ä¸ªåµå¥å½æ°å¯ä»¥âç»§æ¿â容å¨å½æ°çåæ°ååéãæ¢å¥è¯è¯´ï¼å é¨å½æ°å å«å¤é¨å½æ°çä½ç¨åã
å¯ä»¥æ»ç»å¦ä¸ï¼
ä¸é¢çä¾åå±ç¤ºäºåµå¥å½æ°ï¼
function addSquares(a, b) {
function square(x) {
return x * x;
}
return square(a) + square(b);
}
console.log(addSquares(2, 3)); // 13
console.log(addSquares(3, 4)); // 25
console.log(addSquares(4, 5)); // 41
ç±äºå é¨å½æ°å½¢æäºéå ï¼å æ¤ä½ å¯ä»¥è°ç¨å¤é¨å½æ°å¹¶ä¸ºå¤é¨å½æ°åå é¨å½æ°æå®åæ°ï¼
function outside(x) {
function inside(y) {
return x + y;
}
return inside;
}
const fnInside = outside(3); // å¯ä»¥è¿æ ·æ³ï¼ç»æä¸ä¸ªå¯ä»¥å°æä¾çå¼å ä¸ 3 ç彿°
console.log(fnInside(5)); // 8
console.log(outside(3)(5)); // 8
ä¿ååé
注æå°ä¸ä¾ä¸ inside
被è¿åæ¶ x
æ¯æä¹è¢«ä¿ç䏿¥çãä¸ä¸ªéå
å¿
é¡»ä¿åå®å¯è§ä½ç¨å䏿æåæ°ååéãå 为æ¯ä¸æ¬¡è°ç¨ä¼ å
¥çåæ°é½å¯è½ä¸åï¼æ¯ä¸æ¬¡å¯¹å¤é¨å½æ°çè°ç¨å®é
ä¸éæ°å建äºä¸éè¿ä¸ªéå
ãåªæå½è¿åç inside
没æå被å¼ç¨æ¶ï¼å
åæä¼è¢«éæ¾ã
è¿ä¸å¨å ¶ä»å¯¹è±¡ä¸åå¨å¼ç¨æ²¡ä»ä¹ä¸åï¼ä½æ¯é常ä¸å¤ªææ¾ï¼å 为并ä¸è½ç´æ¥è®¾ç½®å¼ç¨ï¼ä¹ä¸è½æ£æ¥å®ä»¬ã
å¤å±åµå¥å½æ°å½æ°å¯ä»¥è¢«å¤å±åµå¥ãä¾å¦ï¼
A
ï¼å¯ä»¥å
å«å½æ°ï¼B
ï¼ï¼åè
å¯ä»¥åå
å«å½æ°ï¼C
ï¼ãB
å C
é½å½¢æäºéå
ï¼æä»¥ B
å¯ä»¥è®¿é® A
ï¼C
å¯ä»¥è®¿é® B
ãC
å¯ä»¥è®¿é® B
ï¼è B
å¯ä»¥è®¿é® A
ï¼ï¼æä»¥ C
ä¹å¯ä»¥è®¿é® A
ãå æ¤ï¼éå å¯ä»¥å å«å¤ä¸ªä½ç¨åï¼å®ä»¬éå½å°å å«äºææå å«å®ç彿°ä½ç¨åãè¿ä¸ªç§°ä¹ä¸ºä½ç¨åé¾ãï¼ç¨åè§£éå®è¢«ç§°ä¸ºâé¾âçåå ãï¼
æè以ä¸ç¤ºä¾ï¼
function A(x) {
function B(y) {
function C(z) {
console.log(x + y + z);
}
C(3);
}
B(2);
}
A(1); // æå° 6ï¼å³ 1 + 2 + 3ï¼
å¨è¿ä¸ªç¤ºä¾ä¸ï¼C
å¯ä»¥è®¿é® B
ç y
å A
ç x
ã
è¿æ¯å 为ï¼
B
å½¢æäºä¸ä¸ªå
å« A
çéå
ï¼å³ï¼B
å¯ä»¥è®¿é® A
çåæ°ååéï¼C
å½¢æäºä¸ä¸ªå
å« B
çéå
ãC
çéå
å
å« B
ï¼ä¸ B
çéå
å
å« A
ï¼æä»¥ C
çéå
ä¹å
å« A
ãè¿æå³ç C
åæ¶å¯ä»¥è®¿é® B
å A
çåæ°ååéãæ¢è¨ä¹ï¼C
ç¨è¿ä¸ªé¡ºåºé¾æ¥äº B
å A
çä½ç¨åãåè¿æ¥å´ä¸æ¯è¿æ ·ãA
ä¸è½è®¿é® C
ï¼å 为 A
ä¸è½è®¿é® B
ä¸çåæ°ååéï¼C
æ¯ B
ä¸çä¸ä¸ªåéï¼æä»¥ C
æ¯ B
ç§æçã
å½åä¸ä¸ªéå ä½ç¨åä¸ä¸¤ä¸ªåæ°æè åéååæ¶ï¼å°±ä¼äº§çå½åå²çªãæ´è¿çä½ç¨åææ´é«çä¼å æï¼æä»¥æè¿çä¼å 级æé«ï¼æè¿çä¼å 级æä½ãè¿å°±æ¯ä½ç¨åé¾ãé¾ç第ä¸ä¸ªå ç´ å°±æ¯æéé¢çä½ç¨åï¼æåä¸ä¸ªå ç´ ä¾¿æ¯æå¤å±çä½ç¨åãèè以ä¸ç¤ºä¾ï¼
function outside() {
const x = 5;
function inside(x) {
return x * 2;
}
return inside;
}
console.log(outside()(10)); // 20ï¼è䏿¯ 10ï¼
å½åå²çªåçå¨è¯å¥ return x * 2
ä¸ï¼inside
çåæ° x
å outside
çåé x
åçäºå²çªãè¿éçä½ç¨é¾åæ¯ {inside
ãoutside
ãå
¨å±å¯¹è±¡}ãå æ¤ inside
ç x
ä¼å
äº outside
ç x
ï¼å æ¤è¿å 20
ï¼inside
ç x
ï¼è䏿¯ 10
ï¼outside
ç x
ï¼ã
éå æ¯ JavaScript ä¸æå¼ºå¤§çç¹æ§ä¹ä¸ãJavaScript å è®¸å½æ°åµå¥ï¼å¹¶ä¸å é¨å½æ°å ·æå®ä¹å¨å¤é¨å½æ°ä¸çææåéå彿°ï¼ä»¥åå¤é¨å½æ°è½è®¿é®çææåéå彿°ï¼çå®å ¨è®¿é®æéã
使¯ï¼å¤é¨å½æ°å´ä¸è½è®¿é®å®ä¹å¨å é¨å½æ°ä¸çåéå彿°ãè¿ç»å é¨å½æ°çåéæä¾äºä¸ç§å°è£ ã
æ¤å¤ï¼ç±äºå é¨å½æ°å¯ä»¥è®¿é®å¤é¨å½æ°çä½ç¨åï¼å æ¤å½å é¨å½æ°çå卿大äºå¤é¨å½æ°æ¶ï¼å¤é¨å½æ°ä¸å®ä¹çåéå彿°ççå卿尿¯å é¨å½æ°æ§è¡çæç»æ¶é´è¦é¿ãå½å é¨å½æ°ä»¥æä¸ç§æ¹å¼è¢«ä»»ä½ä¸ä¸ªå¤é¨å½æ°ä¹å¤çä»»ä½ä½ç¨åè®¿é®æ¶ï¼å°±ä¼å建éå ã
// å¤é¨å½æ°å®ä¹äºä¸ä¸ªå为ânameâçåé
const pet = function (name) {
const getName = function () {
// å
é¨å½æ°å¯ä»¥è®¿é®å¤é¨å½æ°çânameâåé
return name;
};
return getName; // è¿åå
é¨å½æ°ï¼ä»èå°å
¶æ´é²ç»å¤é¨ä½ç¨å
};
const myPet = pet("Vivie");
console.log(myPet()); // "Vivie"
å®é ä¸å¯è½ä¼æ¯ä¸é¢ç代ç 夿çå¤ãå®å¯ä»¥è¿åä¸ä¸ªå å«ç¨äºæä½å¤é¨å½æ°çå é¨åéçæ¹æ³ç对象ã
const createPet = function (name) {
let sex;
const pet = {
// å¨è¿ä¸ªä¸ä¸æä¸ï¼setName(newName) çä»·äº setName: function (newName)
setName(newName) {
name = newName;
},
getName() {
return name;
},
getSex() {
return sex;
},
setSex(newSex) {
if (
typeof newSex === "string" &&
(newSex.toLowerCase() === "male" || newSex.toLowerCase() === "female")
) {
sex = newSex;
}
},
};
return pet;
};
const pet = createPet("Vivie");
console.log(pet.getName()); // Vivie
pet.setName("Oliver");
pet.setSex("male");
console.log(pet.getSex()); // male
console.log(pet.getName()); // Oliver
å¨ä¸é¢ç代ç ä¸ï¼å¤é¨å½æ°ç name
åé对å
é¨å½æ°æ¥è¯´æ¯å¯è®¿é®çï¼èé¤äºéè¿å
é¨å½æ°æ¬èº«ï¼æ²¡æå
¶ä»ä»»ä½æ¹æ³å¯ä»¥åå¾å
é¨çåéãå
é¨å½æ°çå
é¨åéå°±å对å¤é¨åæ°ååéçä¿é©æãå®ä»¬ä¼ä¸ºå
é¨å½æ°ä¿çâ稳å®âèåâ被å°è£
âçæ°æ®åä¸è¿è¡ãèè¿äºå
é¨å½æ°çè³ä¸ä¼è¢«åé
ç»ä¸ä¸ªåéï¼æè
æä¸ªåç§°ã
const getCode = (function () {
const apiCode = "0]Eal(eh&2"; // æä»¬ä¸å¸æå¤é¨è½å¤ä¿®æ¹ç代ç ......
return function () {
return apiCode;
};
})();
console.log(getCode()); // "0]Eal(eh&2"
夿³¨ï¼ 使ç¨éå æ¶éè¦æ³¨æè®¸å¤é·é±ï¼
妿ä¸ä¸ªéå ç彿°å®ä¹äºä¸ä¸ªåå¤é¨çæä¸ªåéåç§°ç¸åçåéï¼é£ä¹è¿ä¸ªéå å°æ æ³å¼ç¨å¤é¨ä½ç¨åä¸çè¿ä¸ªåéãï¼å é¨ä½ç¨åçåéâè¦çâå¤é¨ä½ç¨åï¼ç´è³ç¨åºéåºå é¨ä½ç¨åãå¯ä»¥å°å ¶è§ä½å½åå²çªãï¼
const createPet = function (name) {
// å¤é¨å½æ°å®ä¹äºä¸ä¸ªå为ânameâçåéã
return {
setName(name) {
// éå
彿°è¿å®ä¹äºä¸ä¸ªå为ânameâçåéã
name = name; // æä»¬å¦ä½è®¿é®å¤é¨å½æ°å®ä¹çânameâï¼
},
};
};
ä½¿ç¨ arguments 对象
彿°çå®é åæ°ä¼è¢«ä¿åå¨ä¸ä¸ªç±»ä¼¼æ°ç»ç arguments 对象ä¸ãå¨å½æ°å ï¼ä½ å¯ä»¥æå¦ä¸æ¹å¼æ¾åºä¼ å ¥çåæ°ï¼
å
¶ä¸ i
æ¯åæ°çåºå·ï¼ä» 0
å¼å§ãæä»¥ç¬¬ä¸ä¸ªä¼ å
¥å½æ°ç忰伿¯ arguments[0]
ãåæ°çæ°éç± arguments.length
表示ã
ä½¿ç¨ arguments
对象ï¼ä½ å¯ä»¥å¤çæ¯å£°ææ´å¤çåæ°æ¥è°ç¨å½æ°ãè¿å¨ä½ äºå
ä¸ç¥éä¼éè¦å°å¤å°åæ°ä¼ éç»å½æ°æ¶ååæç¨ãä½ å¯ä»¥ç¨ arguments.length
æ¥è·å¾å®é
ä¼ éç»å½æ°çåæ°çæ°éï¼ç¶åç¨ arguments
对象æ¥è®¿é®æ¯ä¸ªåæ°ã
ä¾å¦ï¼èèæä¸ä¸ªç¨æ¥è¿æ¥å符串ç彿°ãå¯ä¸æ£å¼çåæ°æ¯å¨è¿æ¥åçå符串ä¸ç¨æ¥åéåä¸ªè¿æ¥é¨åçå符ãè¯¥å½æ°å®ä¹å¦ä¸ï¼
function myConcat(separator) {
let result = ""; // åå§åå表
// è¿ä»£ arguments
for (let i = 1; i < arguments.length; i++) {
result += arguments[i] + separator;
}
return result;
}
ä½ å¯ä»¥ç»è¿ä¸ªå½æ°ä¼ éä»»ææ°éçåæ°ï¼å®ä¼å°åä¸ªåæ°è¿æ¥æä¸ä¸ªå符串âå表âï¼
console.log(myConcat("ã", "红", "æ©", "è"));
// "çº¢ãæ©ãèã"
console.log(myConcat("ï¼", "大象", "é¿é¢é¹¿", "ç®å", "çè±¹"));
// "大象ï¼é¿é¢é¹¿ï¼ç®åï¼çè±¹ï¼"
console.log(myConcat("ã", "æºè
", "ç½å", "çè³", "è¡æ¤", "é¦è"));
// "æºè
ãç½åãçè³ãè¡æ¤ãé¦èã"
夿³¨ï¼ arguments
åéåªæ¯âç±»æ°ç»âï¼è䏿¯æ°ç»ãå®ä¸æ°ç»ç±»ä¼¼ï¼æç´¢å¼ç¼å·å length
屿§ãå°½ç®¡å¦æ¤ï¼å®å¹¶ä¸å
·å¤ Array å¯¹è±¡çæææ°ç»æä½æ¹æ³ã
æ´å¤ä¿¡æ¯è¯·é
读 JavaScript åèä¸ç Function
对象ã
æä¸¤ç§ç¹æ®çåæ°è¯æ³ï¼é»è®¤åæ°åå©ä½åæ°ã
é»è®¤åæ°å¨ JavaScript ä¸ï¼å½æ°åæ°çé»è®¤å¼æ¯ undefined
ãç¶èï¼å¨æäºæ
åµä¸è®¾ç½®ä¸åçé»è®¤å¼å¯è½ä¼å¾æç¨ãè¿æ£æ¯é»è®¤åæ°çä½ç¨ã
å¨è¿å»ï¼ç¨äºè®¾å®é»è®¤åæ°çä¸è¬çç¥æ¯å¨å½æ°ç主ä½ä¸æµè¯åæ°å¼æ¯å¦ä¸º undefined
ï¼å¦ææ¯åèµäºè¿ä¸ªåæ°ä¸ä¸ªé»è®¤å¼ã
å¨ä¸é¢ç示ä¾ä¸ï¼å¦æè°ç¨å½æ°æ¶æ²¡æç» b
æä¾å¼ï¼é£ä¹å®çå¼å°±æ¯ undefined
ï¼å¨æ§è¡ a*b
æ¶ï¼è°ç¨ä¹æ³é常ä¼è¿å NaN
ã使¯ï¼è¿å·²ç»è¢«ç¤ºä¾ç第äºè¡æé¿å
äºï¼
function multiply(a, b) {
b = typeof b !== "undefined" ? b : 1;
return a * b;
}
console.log(multiply(5)); // 5
使ç¨é»è®¤åæ°ï¼å¨å½æ°ä½çæå¨æ£æ¥å°±ä¸åå¿
è¦äºãç°å¨ï¼ä½ å¯ä»¥å¨å½æ°å¤´ç®åå°æ 1
设å®ä¸º b
çé»è®¤å¼ï¼
function multiply(a, b = 1) {
return a * b;
}
console.log(multiply(5)); // 5
è§åèçé»è®¤åæ°ï¼ä»¥è·å详æ ã
å©ä½åæ°å©ä½åæ°è¯æ³å 许å°ä¸ç¡®å®æ°éçåæ°è¡¨ç¤ºä¸ºæ°ç»ã
å¨ä¸é¢ç示ä¾ä¸ï¼multiply
彿°ä½¿ç¨å©ä½åæ°æ¶éä»ç¬¬äºä¸ªåæ°å¼å§å°æåçåæ°ãç¶åï¼è¯¥å½æ°å°å®ä»¬ä¸ç¬¬ä¸ä¸ªåæ°ç¸ä¹ã
function multiply(multiplier, ...theArgs) {
return theArgs.map((x) => multiplier * x);
}
const arr = multiply(2, 1, 2, 3);
console.log(arr); // [2, 4, 6]
ç®å¤´å½æ°
ç®å¤´å½æ°è¡¨è¾¾å¼ï¼ä¹ç§°èç®å¤´ï¼ä»¥åºåæªæ¥ JavaScript ä¸å设ç ->
è¯æ³ï¼ç¸æ¯å½æ°è¡¨è¾¾å¼å
·æè¾ççè¯æ³ä¸æ²¡æå®èªå·±ç this
ãarguments
ãsuper
å new.target
ãç®å¤´å½æ°æ»æ¯å¿åçã
æä¸¤ä¸ªå ç´ ä¼å½±å对ç®å¤´å½æ°çå¼å
¥ï¼æ´ç®æ´ç彿°å this
çæ ç»å®æ§ã
å¨ä¸äºå½æ°æ¨¡å¼ä¸ï¼æ´ç®æ´ç彿°å¾å欢è¿ã对æ¯ä¸ä¸ï¼
const a = ["Hydrogen", "Helium", "Lithium", "Beryllium"];
const a2 = a.map(function (s) {
return s.length;
});
console.log(a2); // [8, 6, 7, 9]
const a3 = a.map((s) => s.length);
console.log(a3); // [8, 6, 7, 9]
æ åç¬ç this
å¨ç®å¤´å½æ°åºç°ä¹åï¼æ¯ä¸ä¸ªæ°å½æ°é½å®ä¹äºèªå·±ç this
å¼ï¼å¨æé 彿°ä¸æ¯ä¸ä¸ªæ°ç对象ï¼å¨ä¸¥æ ¼æ¨¡å¼ä¸æ¯ undefinedï¼å¨ä½ä¸ºâå¯¹è±¡æ¹æ³âè°ç¨ç彿°ä¸æåè¿ä¸ªå¯¹è±¡ï¼ççï¼ãäºå®è¯æï¼è¿å¯¹äºé¢å对象çç¼ç¨é£æ ¼æ¥è¯´å¹¶ä¸çæ³ã
function Person() {
// æé 彿° Person() å° `this` å®ä¹ä¸ºèªèº«ã
this.age = 0;
setInterval(function growUp() {
// å¨éä¸¥æ ¼æ¨¡å¼ä¸ï¼growUp() 彿°å° `this` å®ä¹ä¸ºâå
¨å±å¯¹è±¡âï¼
// è¿ä¸ Person() å®ä¹ç `this` ä¸åã
this.age++;
}, 1000);
}
const p = new Person();
å¨ ECMAScript 3/5 ä¸ï¼éè¿æ this
çå¼èµå¼ç»ä¸ä¸ªåéå¯ä»¥ä¿®å¤è¿ä¸ªé®é¢ã
function Person() {
// æçäººä¹ æ¯ç¨ `that` è䏿¯ `self`ã
// è¯·éæ©ä¸ç§æ¹å¼ï¼å¹¶ä¿æåå代ç çä¸è´æ§
const self = this;
self.age = 0;
setInterval(function growUp() {
// åè°å¼ç¨ `self` åéï¼å
¶å¼ä¸ºé¢æç对象ã
self.age++;
}, 1000);
}
å¦å¤ï¼å建ä¸ä¸ªç»å®å½æ°å¯ä»¥ä½¿å¾ this
å¼è¢«æ£ç¡®ä¼ éç» growUp()
彿°ã
ç®å¤´å½æ°æ²¡æèªå·±ç this
ï¼èæ¯ä½¿ç¨å°éæ§è¡ä¸ä¸æç this
å¼ãå æ¤ï¼å¨ä»¥ä¸ä»£ç ä¸ï¼ä¼ éå° setInterval
ä¸ç彿°å
ç this
ä¸éå
彿°ä¸ç this
ç¸åï¼
function Person() {
this.age = 0;
setInterval(() => {
this.age++; // è¿éç `this` æ£ç¡®å°æå person 对象
}, 1000);
}
const p = new Person();
é¢å®ä¹å½æ°
JavaScript è¯è¨æå 个顶级çå ç½®å½æ°ï¼
eval()
eval()
æ¹æ³æ§è¡æ¹æ³è®¡ç®ä»¥å符串表示ç JavaScript 代ç ã
isFinite()
isFinite()
å
¨å±å½æ°å¤æä¼ å
¥ç弿¯å¦æ¯æéçæ°å¼ã妿éè¦çè¯ï¼å
¶åæ°é¦å
被转æ¢ä¸ºä¸ä¸ªæ°å¼ã
isNaN()
isNaN()
彿°å¤æä¸ä¸ªå¼æ¯å¦æ¯ NaN
ãæ³¨æï¼isNaN
彿°å
é¨ç强å¶è½¬æ¢è§åååæè¶£ãä½ ä¹å¯ä»¥ä½¿ç¨ Number.isNaN()
æ¥å¤æè¯¥å¼æ¯å¦ä¸º NaNã
parseFloat()
parseFloat()
彿°è§£æåç¬¦ä¸²åæ°ï¼å¹¶è¿åä¸ä¸ªæµ®ç¹æ°ã
parseInt()
parseInt()
彿°è§£æåç¬¦ä¸²åæ°ï¼å¹¶è¿åæå®çåºæ°ï¼åºç¡æ°å¦ä¸çæ°å¶ï¼çæ´æ°ã
decodeURI()
decodeURI()
彿°å¯¹å
åç»è¿ encodeURI
彿°æè
å
¶ä»ç±»ä¼¼æ¹æ³ç¼ç è¿çç»ä¸èµæºæ å¿ç¬¦ï¼URIï¼è¿è¡è§£ç ã
decodeURIComponent()
decodeURIComponent()
æ¹æ³å¯¹å
åç»è¿ encodeURIComponent
彿°æè
å
¶ä»ç±»ä¼¼æ¹æ³ç¼ç çç»ä¸èµæºæ å¿ç¬¦ï¼URIï¼è¿è¡è§£ç ã
encodeURI()
encodeURI()
æ¹æ³éè¿ä»¥è¡¨ç¤ºå符ç UTF-8 ç¼ç çä¸ä¸ªã两个ãä¸ä¸ªæå个转ä¹åºåæ¿æ¢ç»ä¸èµæºæ è¯ç¬¦ï¼URIï¼çæäºå符æ¥è¿è¡ç¼ç ï¼å¯¹äºç±ä¸¤ä¸ªâ代çï¼surrogateï¼âåç¬¦ç»æçå符ï¼åªä¼ç¼ç 为å个转ä¹åºåï¼ã
encodeURIComponent()
encodeURIComponent()
æ¹æ³éè¿ä»¥è¡¨ç¤ºå符ç UTF-8 ç¼ç çä¸ä¸ªã两个ãä¸ä¸ªæå个转ä¹åºåæ¿æ¢ç»ä¸èµæºæ è¯ç¬¦ï¼URIï¼çæäºå符æ¥è¿è¡ç¼ç ï¼å¯¹äºç±ä¸¤ä¸ªâ代çâåç¬¦ç»æçå符ï¼åªä¼ç¼ç 为å个转ä¹åºåï¼ã
escape()
å·²å¼ç¨
escape()
æ¹æ³çæä¸ä¸ªæ°çå符串ï¼å
¶ä¸çæäºåç¬¦å·²è¢«æ¿æ¢ä¸ºåå
è¿å¶è½¬ä¹åºåãå
¶å·²è¢«å¼ç¨ï¼è¯·ä½¿ç¨ encodeURI()
æ encodeURIComponent()
代æ¿ã
unescape()
å·²å¼ç¨
unescape()
æ¹æ³è®¡ç®çæä¸ä¸ªæ°çå符串ï¼å
¶ä¸çåå
è¿å¶è½¬ä¹åºåå°è¢«å
¶è¡¨ç¤ºçåç¬¦æ¿æ¢ãä¸è¿°ç转ä¹åºåå°±å escape
ä»ç»ç䏿 ·ãå
¶å·²è¢«å¼ç¨ï¼è¯·ä½¿ç¨ decodeURI()
æ decodeURIComponent()
æ¿ä»£ã
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