í¨ìë JavaScriptìì 기본 êµ¬ì± ìì ì¤ íëì ëë¤. JavaScriptì í¨ìë ìì ì ìííê±°ë ê°ì ê³ì°íë ëª ë ¹ë¬¸ì ì§í©ì¸ íë¡ìì (procedure)ì ë¹ì·íì§ë§, íë¡ìì ê° í¨ìë¡ ì°ì´ë ¤ë©´ ì ë ¥ì ë°ëì ë°ìì¼ íê³ ì ë ¥ê³¼ ëª íí ê´ê³ê° ìë ì¶ë ¥ì ë°íí´ì¼ í©ëë¤. í¨ì를 ì¬ì©íë ¤ë©´ í¨ì를 í¸ì¶í ì¤ì½í ë´ìì í¨ì를 ì ìí´ì¼ í©ëë¤.
ìì¸í ë´ì©ì JavaScript í¨ìì ëí 문ì를 참조íì¸ì.
í¨ì ì ì í¨ì ì ì¸í¨ì ì ì(ëë í¨ì ì ì¸)ë ë¤ìê³¼ ê°ì í¨ì
í¤ìëë¡ êµ¬ì±ëì´ ììµëë¤.
{ /* ... */ }
ì를 ë¤ì´, ìëì ì½ëë square
ë¼ë ê°ë¨í í¨ì를 ì ìí©ëë¤.
function square(number) {
return number * number;
}
í¨ì square
ì number
ë¼ë íëì 매ê°ë³ì를 ê°ì§ëë¤. ì´ í¨ìë í¨ìì 매ê°ë³ì(number
)를 ê³±í ê°ì ë°ííë ê°ë¨í 구문ì ê°ì§ê³ ììµëë¤. return
문ì í¨ìê° ë°ííë ê°ì ì§ì í©ëë¤.
기본ì ì¼ë¡ number
ì ê°ì 매ê°ë³ìë ê°ì¼ë¡ í¨ìì ì ë¬ë©ëë¤. ë°ë¼ì í¨ì ë´ì ì½ëê° í¨ìì ì ë¬ë ë§¤ê° ë³ìì ìì í ìë¡ì´ ê°ì í ë¹íë ê²½ì°ìë ë³ê²½ ì¬íì ì ìì ì¼ë¡ ëë í´ë¹ í¨ì를 í¸ì¶í ì½ëì ë°ìëì§ ììµëë¤.
ê°ì²´ë¥¼ ë§¤ê° ë³ìë¡ ì ë¬í ë í¨ìê° ê°ì²´ì ìì±ì ë³ê²½íë¤ë©´ ë¤ì ìì ì ê°ì´ í¨ì ì¸ë¶ìì í´ë¹ ë³ê²½ ì¬íì ë³¼ ì ììµëë¤.
function myFunc(theObject) {
theObject.make = "Toyota";
}
const mycar = {
make: "Honda",
model: "Accord",
year: 1998,
};
// `x`ì ê°ì "Honda"ì
ëë¤.
const x = mycar.make;
// `make` ìì±ì í¨ìì ìí´ `Toyota`ë¡ ë³ê²½ë©ëë¤.
myFunc(mycar);
// `y`ì ê°ì "Toyota"ì
ëë¤.
const y = mycar.make;
ë°°ì´(Array)ì ë§¤ê° ë³ìë¡ ì ë¬í ë í¨ìê° ë°°ì´ì ê°ì ë³ê²½íë¤ë©´ ë¤ì ìì ì ê°ì´ í¨ì ì¸ë¶ìì í´ë¹ ë³ê²½ ì¬íì ë³¼ ì ììµëë¤.
function myFunc(theArr) {
theArr[0] = 30;
}
const arr = [45];
console.log(arr[0]); // 45
myFunc(arr);
console.log(arr[0]); // 30
í¨ì ííì
ìì í¨ì ì ì¸ì 구문ì ëª ë ¹ë¬¸ì´ì§ë§ í¨ìë í¨ì ííì(function expression)ì¼ë¡ë ë§ë¤ ì ììµëë¤.
ì´ë¬í í¨ì를 ìµëª
í¨ìë¼ íë©°. í¨ìê° ì´ë¦ì ê°ì§ íìë ììì ì미í©ëë¤. ì를 ë¤ì´, ì ê³± í¨ì square
ì ë¤ìê³¼ ê°ì´ ì ì í ì ììµëë¤.
const square = function (number) {
return number * number;
};
const x = square(4); // `x` ì ê°ì 16 ì
ëë¤.
íì§ë§ í¨ì ííìììë í¨ìì ì´ë¦ì ì§ì í ì ììµëë¤. í¨ìê° ìì ì 참조í ì ìê³ , ëë²ê±°ì ì¤í ì¶ì ìì í¨ì를 ë³´ë¤ ì½ê² ìë³í ì ììµëë¤.
const factorial = function fac(n) {
return n < 2 ? 1 : n * fac(n - 1);
};
console.log(factorial(3));
í¨ì ííìì í¨ì를 ë¤ë¥¸ í¨ìì 매ê°ë³ìë¡ ì ë¬í ë í¸ë¦¬í©ëë¤. ë¤ì ìì ììë 첫 ë²ì§¸ 매ê°ë³ìë¡ í¨ì, ë ë²ì§¸ 매ê°ë³ìë¡ ë°°ì´ì ì ë¬ë°ë map
í¨ì를 ë³´ì¬ì¤ëë¤.
function map(fn, arr) {
const result = new Array(arr.length);
for (let i = 0; i < arr.length; i++) {
result[i] = fn(arr[i]);
}
return result;
}
ê³ìí´ì ìëì ì½ëìì í¨ìë í¨ì ííìì¼ë¡ ì ìë í¨ì를 ë°ê³ ë ë²ì§¸ ì¸ìë¡ ì ë¬ë ë°°ì´ì ê° ììì ëí´ í¨ì를 í¸ì¶í©ëë¤.
function map(fn, arr) {
const result = new Array(arr.length);
for (let i = 0; i < arr.length; i++) {
result[i] = fn(arr[i]);
}
return result;
}
const fn = function (x) {
return x * x * x;
};
const numbers = [0, 1, 2, 5, 10];
const cube = map(fn, numbers);
console.log(cube);
í¨ìë [0, 1, 8, 125, 1000]
ì ë°íí©ëë¤.
JavaScriptììë ì¡°ê±´ì ë°ë¼ í¨ì를 ì ìí ì ììµëë¤. ì를 ë¤ì´, ìë í¨ìë num
ì´ 0
ì¸ ê²½ì°ìë§ myFunc
를 ì ìí©ëë¤.
let myFunc;
if (num === 0) {
myFunc = function (theObject) {
theObject.make = "Toyota";
};
}
ì¬ê¸°ì ì¤ëª
ë ê² ì´ì¸ìë eval()
ì²ë¼ Function
ìì±ì를 ì¬ì©íì¬ ë°íì ì¤ ë¬¸ìì´ìì í¨ì를 ë§ë¤ ì ììµëë¤.
ê°ì²´ì ìì±ì´ í¨ìì¸ ê²ì ë©ìë(method)ë¼ê³ í©ëë¤. ìì¸í ë´ì©ì ê°ì²´ë¡ ìì í기 문ì를 ì°¸ê³ íì¸ì.
í¨ì í¸ì¶í¨ì를 ì ìí´ë í¨ìê° ì¤íëë ê²ì ìëëë¤. í¨ì를 ì ìíë ê²ì í¨ìì ì´ë¦ê³¼ ìíí ìì ì ì§ì íë ê²ì ëë¤.
í¨ì를 í¸ì¶íë©´ ì§ì ë ë§¤ê° ë³ì를 ê°ì§ê³ ìì
ì´ ìíë©ëë¤. ì를 ë¤ì´ í¨ì square
를 ì ìíë¤ë©´ í¨ìë ë¤ìê³¼ ê°ì´ í¸ì¶í ì ììµëë¤.
ìì 문ì¥ì 5
ë¼ë ì¸ì를 ê°ì§ê³ í¨ì를 í¸ì¶í©ëë¤. í¨ìë ì´ í¨ìì ì¤í문ì ì¤ííê³ ê° 25
를 ë°íí©ëë¤.
í¨ìë í¸ì¶ë ë ì¤ì½í ë´ì ìì´ì¼ í©ëë¤. ê·¸ë¬ë í¨ìì ì ì¸ì ì´ ìì ì²ë¼ í¸ì´ì¤í ë ì ììµëë¤. (ì½ëìì í¸ì¶ ìëì ì ì¸ë¬¸ì´ ììµëë¤.)
í¨ìì ì¤ì½íë í¨ìê° ì ì¸ë ê³³(ëë ìµìì ë 벨ì ì ì¸ëìë¤ë©´ ì ì)ì ëë¤.
console.log(square); // squareë ì´ê¸°ê°ì¼ë¡ undefined를 ê°ì§ê³ í¸ì´ì¤í¸ëë¤.
console.log(square(5)); // TypeError: squareë í¨ìê° ìëë¤.
square = function (n) {
return n * n;
};
í¨ìì ì¸ìë 문ìì´ê³¼ ì«ìì ì íëì§ ììµëë¤. ì¬ë¬ë¶ì í¨ìì ì ì²´ ê°ì²´ë¥¼ ì ë¬í ì ììµëë¤. ê°ì²´ë¡ ìì
í기ìì ì ìë showProps()
í¨ìë ì¸ìë¡ ê°ì²´ë¥¼ ë°ë í¨ìì ìì
ëë¤.
í¨ìë ìì ì í¸ì¶í ì ììµëë¤. ì를 ë¤ì´, í©í 리ì¼ì ì¬ê·ì ì¼ë¡ ê³ì°íë í¨ìê° ììµëë¤.
function factorial(n) {
if (n == 0 || n == 1) return 1;
else return n * factorial(n - 1);
}
ë¤ìê³¼ ê°ì´ 1ë¶í° 5ê¹ì§ì í©í 리ì¼ì ê³ì°í ì ììµëë¤.
const a = factorial(1); // aì ê°ì 1ì´ ë©ëë¤.
const b = factorial(2); // bì ê°ì 2ê° ë©ëë¤.
const c = factorial(3); // cì ê°ì 6ì´ ë©ëë¤.
const d = factorial(4); // dì ê°ì 24ê° ë©ëë¤.
const e = factorial(5); // eì ê°ì 120ì´ ë©ëë¤.
í¨ì를 í¸ì¶íë ë¤ë¥¸ ë°©ë²ë¤ì´ ììµëë¤. í¨ì를 ëì í¸ì¶í´ì¼ íê±°ë, í¨ìì ì¸ìì ìê° ë¤ë¥´ê±°ë, í¨ì í¸ì¶ì ë§¥ë½ì´ ë°íììì ê²°ì ë í¹ì í ê°ì²´ë¡ ì¤ì í´ì¼ íë ê²½ì°ê° ì주 ììµëë¤.
í¨ìê° ê·¸ ìì²´ë¡ ê°ì²´ì´ë©° ì´ ê°ì²´ë ì°¨ë¡ë¡ ë©ìë를(Function
ê°ì²´ë¥¼ 참조) ê°ì§ê³ ììµëë¤. 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); // ReferenceError: ì´ê¸°í ë기 ì ìë `square`ì ì ê·¼í ì ììµëë¤.
const square = function (n) {
return n * n;
};
í¨ì ì¤ì½í
í¨ì ë´ìì ì ìë ë³ìë ë³ìê° í¨ìì ì¤ì½íììë§ ì ìëì´ ì기 ë문ì, í¨ì ì¸ë¶ì ì´ë ê³³ììë ì ê·¼í ì ììµëë¤. ê·¸ë¬ë í¨ìê° ì ìë ì¤ì½í ë´ìì ì ìë 모ë ë³ìë í¨ììë ì ê·¼í ì ììµëë¤.
ì¦, ì ìí¨ìë 모ë ì ì ë²ìì ì ìë 모ë ë³ìì ì ê·¼í ì ììµëë¤. ë¤ë¥¸ í¨ì ë´ë¶ì ì ì ë í¨ìë ìì í¨ìì ì ìë 모ë ë³ìì ì ê·¼í ì ìê³ , ëí ìì í¨ìê° ì ê·¼í ì ìë ë¤ë¥¸ ë³ììë ì ê·¼í ì ììµëë¤.
// ë¤ì ë³ìë ì ì ì¤ì½íì ììµëë¤.
const num1 = 20;
const num2 = 3;
const name = "Chamakh";
// ì´ í¨ìë ì ì ì¤ì½íì ììµëë¤.
function multiply() {
return num1 * num2;
}
multiply(); // 60
// ì¤ì²©ë í¨ìì ìì
function getScore() {
const num1 = 2;
const num2 = 3;
function add() {
return `${name} scored ${num1 + num2}`;
}
return add();
}
getScore(); // "Chamakh scored 5"
ì¤ì½íì í¨ì ì¤í ì¬ê·
í¨ìë ìì ì 참조íê³ í¸ì¶í ì ììµëë¤. í¨ìê° ìì ì 참조íë ë°©ë²ìë ì¸ ì¢ ë¥ê° ììµëë¤.
arguments.callee
ì를 ë¤ì´, ë¤ì í¨ìì ì ì를 ê³ ë ¤í´ë³´ì¸ì.
var foo = function bar() {
// ì¬ê¸°ì êµ¬ë¬¸ì´ ë¤ì´ê°ëë¤.
};
í¨ì 본문 ë´ìì ë¤ìì 모ë ëì¼í©ëë¤.
bar()
arguments.callee()
foo()
ìì ì í¸ì¶íë í¨ì를 ì¬ê· í¨ìë¼ê³ í©ëë¤. ì´ì° ë³´ë©´ ì¬ê·ë 루íì ì ì¬í©ëë¤. ë ë¤ ëì¼í ì½ë를 ì¬ë¬ ë² ì¤ííê³ , 무í 루í를 ë°©ì§íë ì¡°ê±´ (ì¬ê¸°ìë 무í ì¬ê·ë¥¼ ë°©ì§íë ì¡°ê±´)ì´ íìí©ëë¤.
ì를 ë¤ì´, ë¤ì 루íë ì¬ê· í¨ìë¡ ë°ê¿ ì ìê³ ê·¸ í¨ì를 í¸ì¶í ì ììµëë¤.
var x = 0;
while (x < 10) {
// 루í ì¡°ê±´: "x < 10"
// ëê° í©ëë¤.
x++;
}
function loop(x) {
if (x >= 10)
// "x >= 10" ë íì¶ ì¡°ê±´ ("!(x < 10)"ì ëì¼)
return;
// ëê° í©ëë¤.
loop(x + 1); // ì¬ê· í¸ì¶
}
loop(0);
ê·¸ë¬ë ì¼ë¶ ìê³ ë¦¬ì¦ì ë¨ì ë°ë³µ 루íê° ë ì ììµëë¤. ì를 ë¤ì´, DOMê³¼ ê°ì í¸ë¦¬ 구조ì 모ë ë ¸ë를 ê°ì ¸ì¤ë ê²ì ì¬ê·ë¥¼ ì¬ì©íë í¸ì´ ë ê°í¸í©ëë¤.
function walkTree(node) {
if (node == null) {
return;
}
// ë
¸ë를 ê°ì§ê³ ëê° í©ëë¤.
for (var i = 0; i < node.childNodes.length; i++) {
walkTree(node.childNodes[i]);
}
}
í¨ì loop
ì ë¹êµíì¬, ê° ì¬ê· í¸ì¶ ìì²´ë ë§ì ì¬ê· í¸ì¶ì ìíí©ëë¤.
ì¬ê· ìê³ ë¦¬ì¦ì ë¹ì¬ê· ìê³ ë¦¬ì¦ì¼ë¡ ë³ííë ê²ì ê°ë¥íì§ë§ ë ¼ë¦¬ê° ë ë³µì¡í´ì§ë ê²½ì°ê° ìê³ ì¤íì ì¬ì©í´ì¼ í©ëë¤.
ì¬ì¤ ì¬ê·ë ì¤í(í¨ì ì¤í)ì ì¬ì©í©ëë¤. ì¤íê³¼ ê°ì ëìì ë¤ì ìì ìì íì¸í ì ììµëë¤.
function foo(i) {
if (i < 0) {
return;
}
console.log(`begin: ${i}`);
foo(i - 1);
console.log(`end: ${i}`);
}
foo(3);
// Output:
// begin:3
// begin:2
// begin:1
// begin:0
// end:0
// end:1
// end:2
// end:3
ì¤ì²©ë í¨ìì í´ë¡ì
í¨ì ë´ì í¨ì를 ë¼ì ë£ì ì ììµëë¤. ì¤ì²©ë(ë´ë¶) í¨ìë ê·¸ê²ì í¬í¨íë (ì¸ë¶) í¨ìììë§ ì¬ì©í ì ììµëë¤.
ê·¸ê²ì ëí í´ë¡ì 를 íì±í©ëë¤. í´ë¡ì ë (ííìì "ë«ë")ë³ì를 ë°ì¸ë©íë í경과 í¨ê» ìì ë³ì를 ê°ì§ ì ìë íí(ì¼ë°ì ì¼ë¡ë í¨ì)ì ëë¤.
ì¤ì²© í¨ìë í´ë¡ì ì´ë¯ë¡, ì¤ì²©ë í¨ìë ê·¸ê²ì í¬í¨íë í¨ìì ì¸ìì ë³ì를 "ìì"í ì ììì ì미í©ëë¤. ì¦, ë´ë¶ í¨ìë ì¸ë¶ í¨ìì ì¤ì½í를 í¬í¨í©ëë¤.
ìì½íìë©´,
ë´ë¶ í¨ìë ì¸ë¶ í¨ìì ëª ë ¹ë¬¸ììë§ ì¡ì¸ì¤í ì ììµëë¤.
ë´ë¶ í¨ìë í´ë¡ì 를 íì±í©ëë¤: ì¸ë¶ í¨ìë ë´ë¶ í¨ìì ì¸ìì ë³ì를 ì¬ì©í ì ìë ë°ë©´ì, ë´ë¶ í¨ìë ì¸ë¶ í¨ìì ì¸ìì ë³ì를 ì¬ì©í ì ììµëë¤.
ë¤ì ìë ì¤ì²©ë í¨ì를 ë³´ì¬ì¤ëë¤.
function addSquares(a, b) {
function square(x) {
return x * x;
}
return square(a) + square(b);
}
a = addSquares(2, 3); // 13
b = addSquares(3, 4); // 25
c = addSquares(4, 5); // 41
ë´ë¶ í¨ìë í´ë¡ì 를 íì±í기 ë문ì ì¸ë¶ í¨ì를 í¸ì¶íê³ , ì¸ë¶ ë° ë´ë¶ í¨ì 모ëì ì¸ì를 ì§ì í ì ììµëë¤.
function outside(x) {
function inside(y) {
return x + y;
}
return inside;
}
// ì´ë¤ ê°ì´ ë¤ì´ìë 3ì ëíë í¨ìë¼ ìê°í´ë³´ì¸ì.
fn_inside = outside(3);
result = fn_inside(5); // 8
result1 = outside(3)(5); // 8
ë³ìì ë³´ì¡´
inside
ê° ë°íë ë ì¸ë¶ í¨ìì ì¸ì x
ê° ë³´ì¡´ëë¤ë ì ì ì ì ììµëë¤. í´ë¡ì ë ê·¸ê²ì 참조íë 모ë ì¤ì½íìì ì¸ìì ë³ì를 ë³´ì¡´í´ì¼ í©ëë¤. ê° í¸ì¶ì ì ì¬ì ì¼ë¡ ë¤ë¥¸ ì¸ì를 ì ê³µí ì ì기 ë문ì, í´ë¡ì ë outside
ì ëíì¬ ë§¤ë² ìë¡ ìì±ë©ëë¤. ë©ëª¨ë¦¬ë ê·¸ 무ìë inside
ì ì ê·¼íì§ ìì ëë§ í´ì ë©ëë¤.
ë³ìì ë³´ì¡´ì ì¼ë° ê°ì²´ìì 참조를 ì ì¥íë ê²ê³¼ ë³ ì°¨ì´ì ì ìì§ë§, ì¬ì©ìê° ì§ì 참조를 ì¤ì íê³ ê²ì¬íëê² ìëì¬ì ëª ííì§ ìì ê²½ì°ê° ë§ìµëë¤.
ë¤ì¤ ì¤ì²© í¨ìí¨ìë ë¤ì¤ ì¤ì²©ë ì ììµëë¤. ììì ëë¤.
A
ìë í¨ì B
ê° í¬í¨ëë©°, B
ìë í¨ì C
ê° í¬í¨ë©ëë¤.B
, C
ë 모ë í´ë¡ì 를 íì±í©ëë¤. ê·¸ëì B
ë A
ì, C
ë B
를 ì ê·¼ í ì ììµëë¤.C
ë A
ì ì ê·¼ í ì ìë B
ìë ì ê·¼í ì ì기 ë문ì A
ìë ì ê·¼ í ì ììµëë¤.ë°ë¼ì í´ë¡ì ë ì¬ë¬ ì¤ì½íê° í¬í¨ë ì ìì¼ë©°, ì´ ì¤ì½í를 í¬í¨íë í¨ìì ì¤ì½í를 ì¬ê·ì ì¼ë¡ í¬í¨í©ëë¤. ì´ê²ì ì¤ì½í ì²´ì´ëì´ë¼ í©ëë¤. (ê·¸ê²ì "ì²´ì´ë"ì´ë¼ íë ì´ì ë ì¶íì ì¤ëª í ê²ì ëë¤.)
ë¤ì ì를 ì´í´ ë³´ê² ìµëë¤.
function A(x) {
function B(y) {
function C(z) {
console.log(x + y + z);
}
C(3);
}
B(2);
}
A(1); // logs 6 (1 + 2 + 3)
ì´ ììì, C
ë B
ì y
ì A
ì x
ì ì ê·¼í ì ìê³ , ë¤ìê³¼ ê°ì´ ë©ëë¤.
B
ë A
를 í¬í¨íë í´ë¡ì 를 íì±í©ëë¤. ì¦, B
ë A
ì ì¸ìì ë³ì를 ìì¸ì¤í ì ììµëë¤.C
ë B
를 í¬í¨íë í´ë¡ì 를 íì±í©ëë¤.C
ì í´ë¡ì ë B
를 í¬í¨íê³ B
ì í´ë¡ì ë A
를 í¬í¨í기 ë문ì, C
ì í´ë¡ì ë A
를 í¬í¨í©ëë¤. ë°ë¼ì C
ë A
ì ì¸ìì ë³ìì ì ê·¼í ì ìë¤ë ê²ì ì미í©ëë¤. ì¦, C
ë A
ì ì¤ì½í를 ì²´ì´ëí©ëë¤.íì§ë§ A
ë C
ì ë³ìì¸ B
ì ì¸ìë ë³ìì ì ê·¼ í ì ì기 ë문ì ê·¸ ë°ëë¡ë ë¶ê°ë¥í©ëë¤. ë°ë¼ì C
ë B
ìê²ë§ ë¹ê³µê°ë¡ ì ì§ë©ëë¤.
í´ë¡ì ì ì¤ì½íìì ë ê°ì ì¸ì ëë ë³ìì ì´ë¦ì´ ê°ì ê²½ì°, ì´ë¦ ì¶©ëì´ ë°ìí©ëë¤. ì´ ê²½ì° ë ì쪽 ì¤ì½íê° ì°ì ìì를 ê°ìµëë¤. ê°ì¥ ë°ê¹¥ ì¤ì½íë ì°ì ììê° ê°ì¥ ë®ì ë°ë©´ì, ê°ì¥ ì쪽 ì¤ì½íë ê°ì¥ ëì ì°ì ìì를 ê°ìµëë¤. ì´ê²ì´ ì¤ì½í ì²´ì¸(scope chain)ì ëë¤. ì²´ì¸ì 첫ë²ì§¸ë ê°ì¥ ì쪽 ì¤ì½íì´ê³ , ë§ì§ë§ì ê°ì¥ ë°ê¹¥ 쪽 ì¤ì½íì ëë¤. ë¤ìì ì°¸ê³ íì¸ì.
function outside() {
var x = 10;
function inside(x) {
return x * 2;
}
return inside;
}
result = outside()(20); // 10 ëì 20ì ë°íí©ëë¤
ì´ë¦ ì¶©ëì x * 2
를 ë°ííë ë¶ë¶ìì ë°ìíë©°, inside
ì ë§¤ê° ë³ì x
ì outside
ì ë§¤ê° ë³ì x
ì¬ì´ìì ë°ìí©ëë¤. ì¬ê¸°ìì ì¤ì½í ì²´ì´ëì {inside
, outside
, ì ì ê°ì²´
}ë¡ ì´ë£¨ì´ì§ëë¤. ë°ë¼ì inside
ì x
ë outside
ì x
ë³´ë¤ ëì ì°ì ìì를 ê°ê² ëê³ , 20(inside
ì x
)ì´ 10(outside
ì x
) ëì ì ë°íë©ëë¤.
í´ë¡ì ë JavaScriptì ê°ë ¥í ê¸°ë¥ ì¤ íëì ëë¤. JavaScriptë í¨ìì ì¤ì²©(í¨ì ìì í¨ì를 ì ìíë ê²)ì íì©íê³ , ë´ë¶ í¨ìê° ì¸ë¶ í¨ì ììì ì ìë 모ë ë³ìì í¨ì(ë° ì¸ë¶í¨ìê° ì ê·¼í ì ìë ë¤ë¥¸ 모ë ë³ìì í¨ìë¤ê¹ì§)ì ëí´ ì ì²´ ì ê·¼ ê¶íì ë¶ì¬í©ëë¤.
íì§ë§ ì¸ë¶ í¨ìë ë´ë¶ í¨ìì ì ìë ë³ìì í¨ìì ì ê·¼ í ì ììµëë¤. ì´ë ë´ë¶ í¨ìì ë³ìì ëí ì¼ì¢ ì 캡ìí를 ì ê³µí©ëë¤.
ëí, ë´ë¶ í¨ìë ì¸ë¶ í¨ìì ì¤ì½íì ì ê·¼í ì ì기 ë문ì, ë´ë¶ í¨ìê° ì¸ë¶ í¨ìì ìëª ë³´ë¤ ì¤ë ìì¡´íë ê²½ì° ì¸ë¶ í¨ììì ì ì¸ë ë³ìë í¨ìë ì¸ë¶ í¨ìì ì¤í 기ê°ë³´ë¤ ì¤ë ì ì§ë©ëë¤. ë´ë¶ í¨ìê° ì¸ë¶ í¨ì ë°ì 모ë ì¤ì½íìì ì¬ì© ê°ë¥í ë í´ë¡ì ê° ìì±ë©ëë¤.
const pet = function (name) {
// ì¸ë¶ í¨ìë 'name'ì´ë¼ ë¶ë¦¬ë ë³ì를 ì ìí©ëë¤.
const getName = function () {
return name; // ë´ë¶ í¨ìë ì¸ë¶ í¨ìì 'name' ë³ìì ì ê·¼í©ëë¤.
};
return getName; // ë´ë¶ í¨ì를 ë°íí¨ì¼ë¡ì¨, ì¸ë¶ ì¤ì½íì ë
¸ì¶ë©ëë¤.
};
const myPet = pet("Vivie");
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");
pet.getName(); // Vivie
pet.setName("Oliver");
pet.setSex("male");
pet.getSex(); // male
pet.getName(); // Oliver
ìì ì½ëìì ì¸ë¶ í¨ìì name
ë³ìë ë´ë¶ í¨ìì ì ê·¼í ì ìì¼ë©°, ë´ë¶ í¨ì를 íµí´ìë§ ë´ë¶ ë³ìì ì ê·¼í ì ììµëë¤. ë´ë¶ í¨ìì ë´ë¶ ë³ìë ì¸ë¶ ì¸ìì ë³ì를 ìì íê² ì ì¥íë ìí ì í©ëë¤. ì´ë¤ì ë´ë¶ 기ë¥ì´ ìëí ì ìê² 'ì§ìì 'ì´ê³ '캡ìíë' ë°ì´í°ë¥¼ ë³´ì í©ëë¤. í¨ì를 ë³ìì í ë¹íê±°ë ì´ë¦ì ê°ì§ íìê° ììµëë¤.
const getCode = (function () {
const secureCode = "0]Eal(eh&2"; // ì¸ë¶ìì ì ê·¼í ì ìê² íê³ ì¶ì ë³ì.
return function () {
return secureCode;
};
})();
getCode(); // `secureCode`를 ë°íí©ëë¤.
ì°¸ê³ : í´ë¡ì 를 ì¬ì©í ë 주ìí´ì¼ í ì ì´ ììµëë¤!
ëë¬ì¸ì¸ í¨ìê° ì¸ë¶ ì¤ì½íì ë³ìì ëì¼í ì´ë¦ì ê°ì§ ë³ì를 ì ìíë©´, ì¸ë¶ ì¤ì½íì ë³ìì ë¤ì 참조í ë°©ë²ì´ ììµëë¤. (ë´ë¶ ì¤ì½í ë³ìë íë¡ê·¸ë¨ì´ ë´ë¶ ì¤ì½í를 ì¢ ë£í ëê¹ì§ ì¸ë¶ ì¤ì½í ë³ì를 ë®ì´ìëë¤. ì´ê±´ ì´ë¦ ì¶©ëë¡ ìê°í ì ììµëë¤.)
// ì¸ë¶ í¨ìë ë³ì `name`ì ì ìí©ëë¤.
const createPet = function (name) {
return {
// ë´ë¶ì í¨ì ëí ë³ì `name`ì ì ìí©ëë¤.
setName(name) {
// ê·¸ë¼ ì¸ë¶ í¨ììì ì ìë `name`ìë ì´ë»ê² ì ê·¼í´ì¼ í ê¹ì?
name = name;
},
};
};
ì¸ì(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;
}
ì´ë¤ ê°ìì ì¸ìë ì´ í¨ìë¡ ëê²¨ì¤ ì ìê³ , ì´ í¨ìë ê°ê°ì ì¸ì를 íëì 문ìì´ "리ì¤í¸" ë¡ ì°ê²°í©ëë¤.
// "red, orange, blue, "를 ë°íí©ëë¤.
myConcat(", ", "red", "orange", "blue");
// "elephant; giraffe; lion; cheetah; "를 ë°íí©ëë¤.
myConcat("; ", "elephant", "giraffe", "lion", "cheetah");
// "sage. basil. oregano. pepper. parsley. "를 ë°íí©ëë¤.
myConcat(". ", "sage", "basil", "oregano", "pepper", "parsley");
ì°¸ê³ : ì¸ì(arguments) ê°ì²´ë ë°°ì´ê³¼ ë®ì ê²ì´ì§ ë°°ì´ì´ ìëëë¤. ì¸ì ê°ì²´ë ë²í¸ê° ë¶ì¬ì§ ì¸ë±ì¤ì ê¸¸ì´ ìì±ì ê°ì§ê³ ìë¤ë ì ìì ë°°ì´ê³¼ ë®ì ê²ì ëë¤. ì¸ì ê°ì²´ë ë°°ì´ì ë¤ë£¨ë 모ë ë©ìë를 ê°ì§ê³ ìì§ ììµëë¤.
ë ìì¸í ì 보를 ì»ê³ ì¶ì¼ìë©´ Function
ê°ì²´ 문ì를 ì°¸ê³ íì¸ì.
ECMAScript 2015ìì ì¶ê°ë 매ê°ë³ì 구문(parameter syntax)ìë 기본 매ê°ë³ìì ëë¨¸ì§ ë§¤ê°ë³ìë¼ë ë ê°ì§ í¹ìí ì íì´ ììµëë¤.
기본 매ê°ë³ìJavaScriptìì í¨ìì 매ê°ë³ìë undefined
ê° ê¸°ë³¸ì¼ë¡ ì¤ì ë©ëë¤. íì§ë§ ê²½ì°ì ë°ë¼ ë¤ë¥¸ 기본ê°ì ì¤ì íë ê²ì´ ì ì©í ì ììµëë¤. ì´ê²ì´ ë°ë¡ 기본 매ê°ë³ìê° íë ì¼ì
ëë¤.
ì´ì ìë ê¸°ë³¸ê° ì¤ì ì ìí´ í¨ì 본문ìì 매ê°ë³ì ê°ì í
ì¤í¸íê³ , undefined
ì¸ ê²½ì°ì ê°ì í ë¹íë ê²ì´ ë³´í¸ì ì¸ ë°©ìì´ììµëë¤.
ë¤ì ìì ìì b
매ê°ë³ìì ì무 ê°ë ì£¼ì§ ìì¼ë©´, a * b
를 ê³ì° í ë b
매ê°ë³ìì ê°ì undefined
ê° ëë¯ë¡ multiply
í¨ì í¸ì¶ì NaN
ì ë°íí ê²ì
ëë¤. ê·¸ë¬ë ëë²ì§¸ ì¤ìì ì´ ë¬¸ì ê° ë°©ì§ë©ëë¤.
// ECMAScript 2015 ì´ì
function multiply(a, b) {
b = typeof b !== "undefined" ? b : 1;
return a * b;
}
multiply(5); // 5
ëí´í¸ 매ê°ë³ì를 ì¬ì©íë¤ë©´ í¨ì 본문ìì ì¼ì¼í íì¸í íìê° ììµëë¤. ê°ë¨í b
ì 기본ê°ì¼ë¡ 1
ì ë£ì´ì£¼ë©´ ë©ëë¤.
// ECMAScript 2015 ì´í
function multiply(a, b = 1) {
return a * b;
}
multiply(5); // 5
ë ìì¸í ë´ì©ì ë³´ê³ ì¶ì¼ìë©´, 기본 매ê°ë³ì 문ì를 참조íì¸ì.
ëë¨¸ì§ ë§¤ê°ë³ìëë¨¸ì§ ë§¤ê°ë³ì 구문ì ì¬ì©íë©´ ë°°ì´ë¡ ìì ê°ìì ì¸ì를 ëíë¼ ì ììµëë¤.
ì´ ìì ìì, ì°ë¦¬ë ëë¨¸ì§ ë§¤ê°ë³ì를 2ë²ì§¸ ì¸ìë¶í° ë§ì§ë§ ì¸ìê¹ì§ ì»ê¸° ìíì¬ ì¬ì©íììµëë¤. ê·¸ë¦¬ê³ ì°ë¦¬ë 첫ë²ì§¸ ê°ì¼ë¡ ëë¨¸ì§ ë§¤ê°ë³ìì ê³±íììµëë¤. ì´ ìì ë ë¤ì ì¹ì ìì ìê°í íì´í(arrow) í¨ì ì ëë¤.
function multiply(multiplier, ...theArgs) {
return theArgs.map((x) => multiplier * x);
}
var arr = multiply(2, 1, 2, 3);
console.log(arr); // [2, 4, 6]
íì´í í¨ì
íì´í í¨ì íí (ë±ë±í íì´í(fat arrow) í¨ìë¼ê³ ìë ¤ì§)ì í¨ì ííìì ë¹í´ ì§§ì 문ë²ì ê°ì§ê³ ìê³ ì¬ì ì ì¼ë¡ this ê°ì 묶ìµëë¤. íì´í í¨ìë ì¸ì ë ìµëª ì ëë¤. hacks.mozilla.org ë¸ë¡ê·¸ í¬ì¤í¸ "ES6 In Depth: Arrow functions" 를 참조íì¸ì.
íì´í í¨ì ëì
ìë ë ì§§ì í¨ìì ë°ì¸ë© ëì§ìì this
ë¼ë ë ê°ì§ ìì¸ì´ ìí¥ì 미쳤ìµëë¤.
ëªëª í¨ì í¨í´ììë ë ì§§ì í¨ì를 ì¬ì©íë ê²ì´ ë ì ì©í©ëë¤. íë² ë¹êµí´ë³´ì¸ì.
var a = ["Hydrogen", "Helium", "Lithium", "Beryllium"];
var a2 = a.map(function (s) {
return s.length;
});
console.log(a2); // logs [8, 6, 7, 9]
// íì´í í¨ì ì¬ì©
var a3 = a.map((s) => s.length);
console.log(a3); // logs [8, 6, 7, 9]
ì¬ì ì this
íì´í í¨ì ì´ì ê¹ì§ 모ë new í¨ìë ê³ ì í this ê°ì ì ì(ìì±ìì ê²½ì° new ê°ì²´, ì격 모ëììë í¸ì¶ ëì§ ìì, í¨ìê° "ê°ì²´ ë©ìë"ë¡ í¸ì¶ ëë ê²½ì°ì 기본 ê°ì²´ ë±)íìµëë¤. ì´ë° ë°©ìì ê°ì²´ ì§í¥ íë¡ê·¸ëë° ì¤íì¼ê³¼ ì ë§ì§ ìììµëë¤.
function Person() {
// `Person()` ìì±ìë `this`를 ìì ì¼ë¡ ì ìí©ëë¤.
this.age = 0;
setInterval(function growUp() {
// ëì¨í 모ëìì `growUp()` í¨ìë `this`를 ì ì ê°ì²´ë¡ ì ìí©ëë¤.
// ì´ë `Person()` ìì±ìì ìí´ ì ìë `this`ì ë¤ë¦
ëë¤.
this.age++;
}, 1000);
}
var p = new Person();
ECMAScript 3/5 ìì ì´ ë¬¸ì ë this
ìì ê°ì ë¤ë®ì ì ìë ë³ìì í ë¹íë©´ì í´ê²°íìµëë¤.
function Person() {
var self = this; // `self` ëì `that`ì ì ííë ì¬ëë ììµëë¤.
// ì´ë í ìª½ë§ ì ííê³ ê·¸ê²ë§ ì¬ì©íëë¡ íì£ .
self.age = 0;
setInterval(function growUp() {
// ì½ë°±ì 기ëíë ê°ì²´ì `self` ë³ì를 참조í©ëë¤.
self.age++;
}, 1000);
}
ëë ì ì í this
ê°ì´ growUp()
í¨ìì ì ë¬ëëë¡, ë°ì¸ë©ë í¨ì를 ë§ë¤ ìë ììµëë¤.
íì´í í¨ììë this
ê° ììµëë¤. íì´í í¨ì를 í¬í¨íë ê°ì²´ ê°ì´ ì¬ì©ë©ëë¤. ë°ë¼ì ë¤ì ì½ëìì setInterval
ì ì ë¬ ë í¨ì ë´ì this
ê°ì íì´í í¨ì를 ëë¬ì¼ í¨ìì this
ì ê°ì ê°ì ê°ìµëë¤.
function Person() {
this.age = 0;
setInterval(() => {
// `this`ë person ê°ì²´ë¥¼ ê°ë¦¬íµëë¤.
this.age++;
}, 1000);
}
var p = new Person();
미리 ì ìë í¨ìë¤
JavaScriptìë ëª ê°ì§ ìµìì ë 벨ì ë´ì¥ í¨ìê° ììµëë¤:
eval()
eval()
ë©ìëë 문ìì´ë¡ ííë JavaScript ì½ë를 ì¤íí©ëë¤.uneval()
ë¹íì¤
uneval()
ë©ìëë Object
ì ìì¤ì½ë를 íííë 문ìì´ì ë§ëëë¤.isFinite()
isFinite()
í¨ìë ì ë¬ë°ì ê°ì´ ì ííì§ ê²°ì í©ëë¤. ë§ì½ íìíë¤ë©´, 매ê°ë³ìë 첫ë²ì§¸ë¡ ì«ìë¡ ë³íë©ëë¤.isNaN()
isNaN()
í¨ìë NaN
ì¸ì§ ìëì§ ê²°ì í©ëë¤.
ì°¸ê³ :
isNaN
í¨ì ìì ê°ì ë³íì í¥ë¯¸ë¡ì´ ê·ì¹ì ê°ì§ê³ ììµëë¤.
Number.isNaN()
ì ì´ì©í´ ê°ì´ NaNì¸ì§ íì¸í ì ììµëë¤.ECMAScript6ìì ì ìë ê°ì´ ì«ìê°ì´ ìë ê²½ì°ìë
typeof
를 ì¬ì©í ìë ììµëë¤.
parseFloat()
parseFloat()
í¨ìë 문ìì´ ì¸ì ê°ì í´ìíì¬ ë¶ëìì«ì ì를 ë°íí©ëë¤.parseInt()
parseInt()
í¨ìë 문ìì´ ì¸ì ê°ì ìíì ì¸ ì ì²´ê³ì ë°ë¼ í´ìíì¬ í¹ì í ì§ë²ì ì ì를 ë°íí©ëë¤.decodeURI()
decodeURI()
í¨ìë ì¬ì ì encodeURI
ì íµí´ ë§ë¤ì´ì§ê±°ë ë¹ì·í ê³¼ì ì íµí´ ë§ë¤ì´ì§ URI(Uniform Resource Identifier) 를 í´ë
í©ëë¤.decodeURIComponent()
decodeURIComponent()
í¨ìë ì¸ì½ë©ì¼ë¡ ì´ì ì ìì±ë URI(encodeURIComponent
)를 ëì½ë©í©ëë¤. URI(Uniform Resource Identifier) ëë ì ì¬í 루í´ì ì¬ì©í©ëë¤.encodeURI()
encodeURI()
ë©ìëë URI(Uniform Resource Identifier)를 ê° ì¸ì¤í´ì¤ì í¹ì í 문ì를 í ê°, ë ê°, ì¸ ê° ëë ë¤ ê°ì UTF-8ì¸ì½ë©ì¼ë¡ ëíë´ì´ì§ë ì°ìë íì¥ë¬¸ìë¤ê³¼ ë°ê¾¸ë ë°©ë²ì¼ë¡ ë¶í¸í í©ëë¤. (ë "surrogate"문ìë¡ êµ¬ì±ë 문ìë¤ì ì¤ì§ ë¤ ê°ì ì°ìë íì¥ë¬¸ì ì
ëë¤)encodeURIComponent()
encodeURIComponent()
ë©ìëë URI(Uniform Resource Identifier) ì»´í¬ëí¸ë¥¼ ê° ì¸ì¤í´ì¤ì í¹ì í 문ì를 íê°, ë ê°, ì¸ ê° ëë ë¤ ê°ì UTF-8 ì¸ì½ë©ì¼ë¡ ëíë´ì´ì§ë ì°ìë íì¥ë¬¸ìë¤ê³¼ ë°ê¾¸ë ë°©ë²ì¼ë¡ ë¶í¸í í©ëë¤.(ë "surrogate"문ìë¡ êµ¬ì±ë 문ìë¤ì ì¤ì§ ë¤ê°ì ì°ìë íì¥ë¬¸ì ì
ëë¤.)escape()
ì§ìì´ ì¤ë¨ëììµëë¤
escape()
ë©ìëë í 문ìì´ìì í¹ì 문ìë¤ì´ 16ì§ íì¥ ë¹í¸ì´ë¡ ë°ëì´ì§ 문ìì´ë¡ ê³ì°í©ëë¤. encodeURI
ëë encodeURIComponent
를 ì¬ì©íì¸ì.unescape()
ì§ìì´ ì¤ë¨ëììµëë¤
unescape()
ë©ìëë 문ìì´ìì íì¥ ë¹í¸ì´ì´ íì¥ ë¹í¸ì´ì´ ëíë´ë 문ìë¡ ë°ëì´ì§ 문ìì´ë¡ ê³ì°í©ëë¤. escape
ìì íì¥ ë¹í¸ì´ì´ ìê°ë ê²ì
ëë¤. unescape()
ë©ìëê° ê³§ ì¬ë¼ì§ê¸° ë문ì, decodeURI()
or 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