21/09/17 TL. ์๋ฐ์คํฌ๋ฆฝํธ - ํจ์(2), ์ค์ฝํ
- -
๐ ํจ์ ํธ์ถ
๐ฅฅ ๋งค๊ฐ๋ณ์์ ์ธ์
ํจ์๊ฐ ํธ์ถ๋๋ฉด ํจ์ ๋ชธ์ฒด ๋ด์์ ์๋ฌต์ ์ผ๋ก ๋งค๊ฐ๋ณ์๊ฐ ์์ฑ๋๊ณ undefined๋ก ์ด๊ธฐํ๋ ์ดํ, ์ธ์๊ฐ ์์๋๋ก ํ ๋น๋๋ค.
function add(x, y) { // ์๋ฌต์ ์ผ๋ก x, y๋ฅผ ์ ์ธ, ์ด๊ธฐํ ํ ์ธ์ 2, 5๋ฅผ ๋๊ฒจ๋ฐ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
return x + y; // x + y์ ๊ฐ์ ํ๊ฐํ ๋ค ๋ฐํํ๋ค.
}
var result = add(2, 5); // ๋งค๊ฐ๋ณ์ x, y๋ก ์ธ์ 2, 5๋ฅผ ๋๊ธด๋ค.
// result์๋ ํ๊ฐ๋ x + y์ ๊ฐ์ด ๋ด๊ธด๋ค.
console.log(add(2)) // NaN
// x์๋ 2๋ฅผ ๋๊ธฐ์ง๋ง, b๋ ๋๊ธธ ๊ฐ์ด ์๊ธฐ ๋๋ฌธ์ undefined ์ํ๋ก ์ ์ง๋๋ค.
// 2 + undefined ์ด๋ฏ๋ก NaN์ด ๋ฐํ๋๋ค.
fuction add2(x, y) {
console.log(arguments);
// Arguments(3) [2, 5, 10, callee: f, Symbol(Symbol.iterator): f]
return x + y;
}
console.log(add2(2, 5, 10)); // 7
// ์ด๊ณผ๋ ์ธ์๋ arguments ๊ฐ์ฒด์ ํ๋กํผํฐ๋ก ๋ณด๊ด๋๋ค.
๐ฅฅ ์ธ์ ํ์ธ
js์ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ๋ ๋ฌธ๋ฒ์ ์ด๋ ํ ๋ฌธ์ ๊ฐ ์์ด ๊ทธ๋๋ก ์คํํ๋ค.
function add(x, y) { // ์๋ฌต์ ์ผ๋ก x, y๋ฅผ ์ ์ธ, ์ด๊ธฐํ ํ ์ธ์ 2, 5๋ฅผ ๋๊ฒจ๋ฐ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
return x + y; // x + y์ ๊ฐ์ ํ๊ฐํ ๋ค ๋ฐํํ๋ค.
}
var result = add(2, 5); // ๋งค๊ฐ๋ณ์ x, y๋ก ์ธ์ 2, 5๋ฅผ ๋๊ธด๋ค.
// result์๋ ํ๊ฐ๋ x + y์ ๊ฐ์ด ๋ด๊ธด๋ค.
console.log(add(2)) // NaN
// x์๋ 2๋ฅผ ๋๊ธฐ์ง๋ง, b๋ ๋๊ธธ ๊ฐ์ด ์๊ธฐ ๋๋ฌธ์ undefined ์ํ๋ก ์ ์ง๋๋ค.
// 2 + undefined ์ด๋ฏ๋ก NaN์ด ๋ฐํ๋๋ค.
fuction add2(x, y) {
console.log(arguments);
// Arguments(3) [2, 5, 10, callee: f, Symbol(Symbol.iterator): f]
return x + y;
}
console.log(add2(2, 5, 10)); // 7
// ์ด๊ณผ๋ ์ธ์๋ arguments ๊ฐ์ฒด์ ํ๋กํผํฐ๋ก ๋ณด๊ด๋๋ค.
- js์ ํจ์๋ ๋งค๊ฐ๋ณ์์ ์ธ์์ ๊ฐ์๊ฐ ์ผ์นํ๋์ง ํ์ธํ์ง ์๋๋ค.
- js๋ ๋์ ํ์ ์ธ์ด์ด๋ค. ๋ฐ๋ผ์ ๋งค๊ฐ๋ณ์ ํ์ ์ ์ฌ์ ์ ์ง์ ํ์ง ์๋๋ค.
์ ๊ฐ์ ์ด์ ๋ก ๋ฐ์ํ๋ ๋ฌธ์ ๋ค์ด๋ค. ๋ฐ๋ผ์, js๋ ํจ์๋ฅผ ์ ์ํ ๋ ์ ์ ํ ์ธ์๊ฐ ์ ๋ฌ๋์๋์ง ํ์ธํด์ผ ํ๋ค.
function add(x, y) {
if (typeof x !== 'number' || typeof y !== 'number') {
throw new TypeError('์ธ์๋ ๋ชจ๋ ์ซ์ ๊ฐ์ด์ด์ผ ํฉ๋๋ค.');
}
return x + y;
}
console.log(add(2)); // TypeError: ์ธ์๋ ๋ชจ๋ ์ซ์ ๊ฐ์ด์ด์ผ ํฉ๋๋ค.
console.log(add('a', 'b')); // TypeError: ์ธ์๋ ๋ชจ๋ ์ซ์ ๊ฐ์ด์ด์ผ ํฉ๋๋ค.
์ธ์๊ฐ ์ ๋ฌ๋์ง ์์ ์๋ ์๋ ๊ฒฝ์ฐ์ ๋งค๊ฐ๋ณ์์ ๊ธฐ๋ณธ๊ฐ์ ์ง์ ํ๋ฉด ๋๋ค.
๐ฅฅ ๋งค๊ฐ๋ณ์์ ์ต๋ ๊ฐ์
๋งค๊ฐ๋ณ์๋ ์์์ ์๋ฏธ๊ฐ ์๋ค. ๋ฐ๋ผ์ ์ซ์๊ฐ ๋ง์์ง๋ฉด ์์ ์ ์ด ๋ฑ์ ์ด์ ๋ก ํจ์ ์ฌ์ฉ์ ์ด๋ ค์์ด ์๊ธฐ๊ธฐ ๋๋ฌธ์ ๊ฐ๊ธ์ ์ ๊ฒ ํ๋ ๊ฒ์ด ์ข๋ค. ์ด์์ ์ธ ํจ์๋ ํ ๊ฐ์ง ์ผ๋ง ํด์ผ ํ๋ฉฐ ๊ฐ๊ธ์ ์๊ฒ ๋ง๋ค์ด์ผ ํ๋ค.
๋ฐ๋ผ์ ๋งค๊ฐ ๋ณ์๋ ์ต๋ 3๊ฐ ์ด์ ๋์ง ์๋ ๊ฒ์ ๊ถ์ฅํ๋ฉฐ ๋ ๋ง์์ง๋ค๋ฉด ํ๋์ ๋งค๊ฐ๋ณ์๋ฅผ ์ ์ธํ๊ณ ๊ฐ์ฒด๋ฅผ ์ธ์๋ก ์ ๋ฌํ๋ ๊ฒ์ด ์ ๋ฆฌํ๋ค(ajax๊ฐ ๊ทธ๋ฌํ ํํ๋ฅผ ์ง๋๋ค). ์ด ๊ฒฝ์ฐ ํ๋กํผํฐ ํค๋ง ์ ํํ ์ง์ ํ๋ฉด ๋งค๊ฐ๋ณ์ ์์๋ฅผ ์ ๊ฒฝ ์ฐ์ง ์์๋ ๋๋ค.
๊ทธ๋ฌ๋ ์ด๋ฌํ ๋ฐฉ๋ฒ๋ ํจ์ ๋ด๋ถ์์ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ์ ๋ ํจ์ ์ธ๋ถ์ ๊ฐ์ฒด๊ฐ ๋ณ๊ฒฝ๋๋ ๋ถ์ ํจ๊ณผ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์ฃผ์ํด์ผ ํ๋ค.
๐ ์ฐธ์กฐ์ ์ํ ์ ๋ฌ๊ณผ ์ธ๋ถ ์ํ์ ๋ณ๊ฒฝ
์์ ๊ฐ์ ๊ฐ์ ์ํ ์ ๋ฌ, ๊ฐ์ฒด๋ ์ฐธ์กฐ์ ์ํ ์ ๋ฌ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
function changeVal(primitive, obj) {
primitive += 100;
obj.name = 'Kim';
}
var num = 100;
var person = { name: 'Lee' };
changeVal(num, person);
console.log(num); // 100
consoel.log(person); // {name: "Kim"}
์์ ๊ฐ์ ๊ฐ ์์ฒด๊ฐ ๋ณต์ฌ๋ผ ๋งค๊ฐ๋ณ์์ ์ ๋ฌ๋๊ธฐ ๋๋ฌธ์ ํจ์ ๋ชธ์ฒด์์ ๊ทธ ๊ฐ์ ๋ณ๊ฒฝํด๋ ์๋ณธ์ด ์ค์ผ๋์ง ์๋๋ค.
๊ทธ๋ฌ๋, ๊ฐ์ฒด ํ์ ์ ์ฐธ์กฐ ๊ฐ์ด ๋ณต์ฌ๋์ด ๋งค๊ฐ๋ณ์์ ์ ๋ฌ๋๊ธฐ ๋๋ฌธ์ ์๋ณธ์ด ํผ์๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ ์ํ ๋ณํ๋ฅผ ์ถ์ ํ๊ธฐ ์ด๋ ค์์ง๋ค. ์ด๋ฐ ๊ฒฝ์ฐ ํด๊ฒฐ ๋ฒ ์ค ํ๋๋ ๊ฐ์ฒด๋ฅผ ๋ถ๋ณ ๊ฐ์ฒด๋ก ๋ง๋ค์ด ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. ์ฆ, ๊น์ ๋ณต์ฌ๋ฅผ ํตํด ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ฌํ ๋นํด ๊ต์ฒดํ๋ ๊ฒ์ด๋ค.
์ธ๋ถ ์ํ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ์ธ๋ถ ์ํ์ ์์กดํ์ง๋ ์๋ ํจ์๋ฅผ ์์ ํจ์๋ผ ํ๋ค. ์์ ํจ์๋ฅผ ํตํด ๋ถ์ ํจ๊ณผ๋ฅผ ์ต๋ํ ์ต์ ํ์ฌ ์ค๋ฅ๋ฅผ ํผํ๊ณ ํ๋ก๊ทธ๋จ์ ์์ ์ฑ์ ๋์ด๋ ค๋ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ด๋ผ ํ๋ค.
๐ ๋ค์ํจ ํจ์์ ํํ
๐ฅฅ ์ฆ์ ์คํ ํจ์
ํจ์ ์ ์์ ๋์์ ์ฆ์ ํธ์ถ๋๋ ํจ์๋ฅผ ๋งํ๋ค. ๋จ ํ ๋ฒ๋ง ํธ์ถ๋๋ฉฐ ๋ค์ ํธ์ถํ ์ ์๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ต๋ช ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
function changeVal(primitive, obj) {
primitive += 100;
obj.name = 'Kim';
}
var num = 100;
var person = { name: 'Lee' };
changeVal(num, person);
console.log(num); // 100
consoel.log(person); // {name: "Kim"}
์ฆ์ ์คํ ํจ์๋ ๋ฐ๋์ ๊ทธ๋ฃน ์ฐ์ฐ์ ()๋ก ๊ฐ์ธ์ผ ํ๋ฉฐ ๊ทธ๋ ์ง ์์ผ๋ฉด SyntaxError๋ฅผ ๋ฐํํ๋ค. js์์ง์ด ์๋ฌต์ ์ผ๋ก ํจ์ ์ ์ธ๋ฌธ ๋ค์(์ฆ, ์ค๊ดํธ ๋ค์) ; ์ ์๋ฌต์ ์ผ๋ก ๋ถ์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ์ด ๊ฒฝ์ฐ ๊ทธ๋ฃน ์ฐ์ฐ์๋ก ํด์ํ๊ณ ํผ์ฐ์ฐ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
๊ทธ๋ฃน ์ฐ์ฐ์์ ํผ์ฐ์ฐ์๋ ๊ฐ์ผ๋ก ํ๊ฐ๋๊ธฐ ๋๋ฌธ์ ํจ์ ๋ฆฌํฐ๋ด๋ก ํ๊ฐ๋์ด ํจ์ ๊ฐ์ฒด๊ฐ ๋๋ค. ์ฆ, ํจ์ ๋ฆฌํฐ๋ด์ ํ๊ฐํด ํจ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ์ํด ๊ทธ๋ฃน ์ฐ์ฐ์๋ก ๋ฌถ๋ ๊ฒ์ด๋ค.
์ด ์ธ์๋ ์ฌ๋ฌ ๋ฐฉ๋ฒ์ด ์๋ค.
(function () { // ์ด ๊ฒฝ์ฐ๊ฐ ๊ฐ์ฅ ์ผ๋ฐ์ ์ด๋ค.
// ...
}());
(function () {
// ...
})();
!function() {
// ...
}();
+function() {
// ...
}();
์ฆ์ ์คํ ํจ์๋ ๊ฐ ๋ฐํ, ์ธ์ ์ ๋ฌ ๋ฑ์ ๊ธฐ๋ฅ์ ํ ์ ์๋ค.
var res = (function () {
var a = 3;
var b = 5;
return a * b;
}());
console.log(res); // 15
res = (function (a, b) {
return a * b;
}(3, 5));
console.log(res); // 15
๐ฅฅ ์ฌ๊ท ํจ์
์ฌ๊ท ํธ์ถํ ๋๋ ํจ์ ์ด๋ฆ๋ ๋๊ณ , ์๋ณ์๋ก๋ ๊ฐ๋ฅํ๋ค.
var res = (function () {
var a = 3;
var b = 5;
return a * b;
}());
console.log(res); // 15
res = (function (a, b) {
return a * b;
}(3, 5));
console.log(res); // 15
๐ฅฅ ์ค์ฒฉ ํจ์
ES6 ์ด์ ์๋ ์ฝ๋์ ์ต์์ ๋๋ ๋ค๋ฅธ ํจ์ ๋ด๋ถ์์๋ง ํจ์๋ฅผ ์ ์ํ ์ ์์์ผ๋ ES6๋ถํฐ๋ if ๋ฌธ์ด๋ for๋ฌธ ๋ฑ์ ์ฝ๋ ๋ธ๋ญ ๋ด์์๋ ์ ์ํ ์ ์๋ค. ๋ฌผ๋ก ๋ฐ๋์งํ์ง ์๋ค.
๐ฅฅ ์ฝ๋ฐฑ ํจ์
ํจ์์ ๋งค๊ฐ๋ณ์๋ฅผ ํตํด ๋ค๋ฅธ ํจ์์ ๋ด๋ถ๋ก ์ ๋ฌ๋๋ ํจ์๋ฅผ ์ฝ๋ฐฑํจ์๋ผ๊ณ ํ๋ฉฐ, ๋งค๊ฐ ๋ณ์๋ฅผ ํตํด ํจ์์ ์ธ๋ถ์์ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ ๋ฌ ๋ฐ์ ํจ์๋ฅผ ๊ณ ์ฐจํจ์(HOF)๋ผ๊ณ ํ๋ค.
์ฝ๋ฐฑํจ์๋ ๊ณ ์ฐจ ํจ์์ ์ํด ํธ์ถ๋๋ฉฐ ์ด๋ ๊ณ ์ฐจ ํจ์๋ ํ์์ ๋ฐ๋ผ ์ฝ๋ฐฑ ํจ์์ ์ธ์๋ฅผ ์ ๋ฌํ ์ ์๋ค. ๋ฐ๋ผ์ ๊ณ ์ฐจ ํจ์์ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ ๋ฌํ ๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ํธ์ถํ์ง ์๊ณ ํจ์ ์์ฒด๋ฅผ ์ ๋ฌํด์ผ ํ๋ค.
์ฝ๋ฐฑ ํจ์๋ฅผ ์ต๋ช ํจ์ ๋ฆฌํฐ๋ด๋ก ์ ์ํ๋ฉด์ ๊ณง๋ฐ๋ก ๊ณ ์ฐจ ํจ์์ ์ ๋ฌํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค.
function repeat(n, f) {
for (var i = 0; i < n; i++) {
f(i); // i๋ฅผ ์ ๋ฌํ๋ฉฐ f๋ฅผ ํธ์ถํ๋ค.
}
}
reapeat(5, function (i) {
if (i % 2) console.log(i);
}); // 1 3
์ฝ๋ฐฑํจ์๋ ์ผ๋ถ๋ถ๋ง ๋ค๋ฅธ ํจ์๋ฅผ ๋งค๋ฒ ์๋กญ๊ฒ ์ ์ํ ํ์๋ฅผ ์๊ฒ ๋ง๋ค ๋ฟ๋ง ์๋๋ผ ๋น๋๊ธฐ ์ฒ๋ฆฌ(์ด๋ฒคํธ ์ฒ๋ฆฌ, Ajax ํต์ , ํ์ด๋จธ ํจ์ ๋ฑ)์ ํ์ฉ๋๋ ์ค์ํ ํจํด์ด๋ค.
// ์ฝ๋ฐฑ ํจ์๋ฅผ ํตํ ์ด๋ฒคํธ ์ฒ๋ฆฌ
document.getElementById('myButton').addEventListener('click', function() {
console.log('button clicked!');
});
// ์ฝ๋ฐฑ ํจ์๋ฅผ ์ฌ์ฉํ ๋น๋๊ธฐ ์ฒ๋ฆฌ
setTimeout(function() {
console.log('1์ด ๊ฒฝ๊ณผ');
}, 1000);
๋ํ ๋ฐฐ์ด ๊ณ ์ฐจ ํจ์์์๋ ์ฌ์ฉ๋๋ค. js์์ ๋ฐฐ์ด์ ์ฌ์ฉ ๋น๋๊ฐ ๋งค์ฐ ๋์ ์๋ฃ๊ตฌ์กฐ์ด๊ณ ๋ฐฐ์ด์ ๋ค๋ฃฐ ๋ ๋ฐฐ์ด ๊ณ ์ฐจ ํจ์๋ ๋งค์ฐ ์ค์ํ๋ค.
var res = [1, 2, 3].map(function (item) {
return item * 2;
});
console.log(res); // [2, 4, 6]
res = [1, 2, 3].filter(function (item) {
return item % 2;
});
console.log(res); // [1, 3]
res = [1, 2, 3].reduce(function (acc, cur) {
return acc + cur;
}, 0);
console.log(res); // 6
๐ฅฅ ์์ ํจ์์ ๋น์์ ํจ์
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์์ ํจ์์ ๋ณด์กฐ ํจ์์ ์กฐํฉ์ ํตํด ์ธ๋ถ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ถ์ ํจ๊ณผ๋ฅผ ์ต์ํํด ๋ถ๋ณ์ฑ์ ์งํฅํ๋ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ด๋ค. ๋ก์ง ๋ด์ ์กด์ฌํ๋ ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฐ๋ณต๋ฌธ์ ์ ๊ฑฐํด ๋ณต์ก์ฑ์ ํด๊ฒฐํ๋ฉฐ, ๋ณ์ ์ฌ์ฉ์ ์ต์ ํ๊ฑฐ๋ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์ต์ํํด์ ์ํ ๋ณ๊ฒฝ์ ํผํด ์ค๋ฅ๋ฅผ ์ต์ํํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ค.
- ์กฐ๊ฑด๋ฌธ์ด๋ ๋ฐ๋ณต๋ฌธ์ ๋ก์ง์ ํ๋ฆ์ ์ดํดํ๊ธฐ ์ด๋ ต๊ฒ ํด์ ๊ฐ๋ ์ฑ์ ํด์น๊ณ , ๋ณ์ ๊ฐ์ ๋๊ตฐ๊ฐ์ ์ํด ์ธ์ ๋ ์ง ๋ณ๊ฒฝ๋ ์ ์์ด ์ค๋ฅ ๋ฐ์์ ๊ทผ๋ณธ ์์ธ์ด ๋ ์ ์๋ค.
js๋ ๋ฉํฐ ํจ๋ฌ๋ค์ ์ธ์ด์ด๋ฏ๋ก ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ๋ฟ๋ง ์๋๋ผ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ ๊ทน์ ์ผ๋ก ํ์ฉํ๊ณ ์๋ค.
๐์ค์ฝํ๋?
๋ชจ๋ ์๋ณ์(๋ณ์ ์ด๋ฆ, ํจ์ ์ด๋ฆ, ํด๋์ค ์ด๋ฆ ๋ฑ)๋ ์์ ์ด ์ ์ธ๋ ์์น์ ์ํด ๋ค๋ฅธ ์ฝ๋๊ฐ ์๋ณ์ ์์ ์ ์ฐธ์กฐํ ์ ์๋ ์ ํจ ๋ฒ์๊ฐ ๊ฒฐ์ ๋๋ค. ์ด๋ฅผ ์ค์ฝํ๋ผ ํ๋ค. ์ฆ, ์ค์ฝํ๋ ์๋ณ์๊ฐ ์ ํจํ ๋ฒ์๋ฅผ ๋งํ๋ค.
์๋ณ์ ๊ฒฐ์ : ์ด๋ฆ์ด ๊ฐ์ 2๊ฐ์ ๋ณ์ ์ค ์ด๋ค ๋ณ์๋ฅผ ์ฐธ์กฐํด์ผ ํ ์ง js ์์ง์ด ๊ฒฐ์ ํ๋ ๊ฑธ ๋งํ๋ค.
- ์ค์ฝํ๋ js ์์ง์ด ์๋ณ์๋ฅผ ๊ฒ์ํ ๋ ์ฌ์ฉํ๋ ๊ท์น์ด๋ผ๊ณ ๋ ํ ์ ์๋ค.
js ์์ง์ ์ฝ๋๋ฅผ ์คํํ ๋ ์ฝ๋์ ๋ฌธ๋งฅ์ ๊ณ ๋ คํ๋ค.
- ์ฝ๋๊ฐ ์ด๋์ ์คํ๋๋ฉฐ ์ด๋ค ์ฝ๋๊ฐ ์๋์ง๋ฅผ ๋ ์์ปฌ ํ๊ฒฝ์ด๋ผ ๋ถ๋ฅธ๋ค. ์คํ ์ปจํ ์คํธ๋ ์ด๋ฅผ ๊ตฌํํ ๊ฒ์ด๋ค. ์ฆ, ๋ชจ๋ ์ฝ๋๋ ์คํ ์ปจํ ์คํธ์์ ํ๊ฐ๋๊ณ ์คํ๋๋ค.
๋ณ์ ์ด๋ฆ์ด ๊ฐ๋๋ผ๋ ์ค์ฝํ๊ฐ ๋ค๋ฅด๋ค๋ฉด ๋ค๋ฅธ ๋ณ๊ฐ์ ๋ณ์๋ผ๊ณ ํ ์ ์๋ค. ์๋ณ์๋ผ๋ ๊ฑด ๋ง ๊ทธ๋๋ก ์๋ณํ ์ ์๋๋ก ์ ์ผํด์ผํ๋ค. ๊ทธ๋ฌ๋ ๋ค๋ฅธ ์ค์ฝํ์๋ ๊ฐ์ ์ด๋ฆ์ ์๋ณ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์ฆ, ์ค์ฝํ๋ ๋ค์์คํ์ด์ค๋ค.
- var๊ฐ ์๋ let, const๋ฅผ ๊ถ์ฅํ๋ ๊ฒ๋ ์ด ์ด์ ์ด๋ค. var ํค์๋๋ก ์ ์ธ๋ ๋ณ์๋ ๊ฐ์ ์ค์ฝํ ๋ด์์ ์ค๋ณต ์ ์ธ์ด ํ์ฉ๋๋ค.
- ๋ค์์คํ์ด์ค : ๊ฐ์ฒด๋ฅผ ๊ตฌ๋ถํ ์ ์๋ ๋ฒ์๋ฅผ ๋ํ๋ธ๋ค. ํ๋์ ๋ค์์คํ์ด์ค ์์์๋ ๋จ ํ๋์ ๊ฐ์ฒด๋ง์ ๊ฐ๋ฆฌํจ๋ค.
๐ ์ค์ฝํ ์ฒด์ธ
ํจ์๊ฐ ์ค์ฒฉ๋ ์ ์๋ค๋ ๊ฒ์ ์ค์ฝํ ๋ํ ์ค์ฒฉ๋ ์ ์๋ค๋ ๋ง์ด๋ค. ๋ชจ๋ ์ค์ฝํ๋ ํ๋์ ๊ณ์ธต์ ๊ตฌ์กฐ๋ก ์ฐ๊ฒฐ๋๋ฉฐ ๋ชจ๋ ์ง์ญ ์ค์ฝํ์ ์ต์์ ์ค์ฝํ๋ ์ ์ญ ์ค์ฝํ๋ค. ์ด๋ ๊ฒ ์ค์ฝํ๊ฐ ๊ณ์ธต์ ์ผ๋ก ์ฐ๊ฒฐ๋ ๊ฒ์ ์ค์ฝํ ์ฒด์ธ์ด๋ผ๊ณ ํ๋ค.
๋ณ์๋ฅผ ์ฐธ์กฐํ ๋ js ์์ง์ ์ค์ฝํ ์ฒด์ธ์ ํตํด ๋ณ์๋ฅผ ์ฐธ์กฐํ๋ ์ฝ๋์ ์ค์ฝํ์์ ์์ํ์ฌ ์์ ์ค์ฝํ ๋ฐฉํฅ์ผ๋ก ์ด๋ํ๋ฉฐ ์ ์ธ๋ ๋ณ์๋ฅผ ๊ฒ์ํ๋ค.
js ์์ง์ ์ฝ๋๋ฅผ ์คํํ๊ธฐ์ ์์ ๋ ์์ปฌ ํ๊ฒฝ์ ์์ฑํ๋ค. ๋ณ์ ์ ์ธ์ด ์คํ๋๋ฉด ๋ณ์ ์๋ณ์๊ฐ ์ด ์๋ฃ๊ตฌ์กฐ์ ํค๋ก ๋ฑ๋ก๋๊ณ , ๋ณ์ ํ ๋น์ด ์ผ์ด๋๋ฉด ์ด ์๋ฃ๊ตฌ์กฐ์ ๋ณ์ ์๋ณ์์ ํด๋นํ๋ ๊ฐ์ ๋ณ๊ฒฝํ๋ค. ๋ณ์์ ๊ฒ์๋ ์ด ์๋ฃ๊ตฌ์กฐ ์์์ ์ด๋ค์ง๋ค.
๐ ํจ์ ๋ ๋ฒจ ์ค์ฝํ
์ง์ญ์ ํจ์ ๋ชธ์ฒด ๋ด๋ถ๋ฅผ ๋งํ๊ณ ์ง์ญ์ ์ง์ญ ์ค์ฝํ๋ฅผ ๋งํ๋ค. ์ด๋ ์ฝ๋ ๋ธ๋ก์ด ์๋ ํจ์์ ์ํด์๋ง ์ง์ญ ์ค์ฝํ๊ฐ ์์ฑ๋๋ค.
C, ์๋ฐ ๋ฑ์ ๋น๋กฏํ ๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ํจ์ ๋ชธ์ฒด๋ง์ด ์๋๋ผ ๋ชจ๋ ์ฝ๋ ๋ธ๋ก(if, for, while, try/catch ๋ฑ)์ด ์ง์ญ ์ค์ฝํ๋ฅผ ๋ง๋ ๋ค. ์ด๋ฌํ ํน์ฑ์ ๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ๋ผ ํ๋ค. ํ์ง๋ง var ํค์๋๋ก ์ ์ธ๋ ๋ณ์๋ ์ค๋ก์ง ํจ์์ ์ฝ๋ ๋ธ๋ก(ํจ์ ๋ชธ์ฒด)๋ง์ ์ง์ญ ์ค์ฝํ๋ก ์ธ์ ํ๋ค. ์ด๋ฌํ ํน์ฑ์ ํจ์ ๋ ๋ฒจ ์ค์ฝํ๋ผ ํ๋ค.
if (true) {
var a = 'b';
}
function foo() {
var b = 'c';
}
console.log(a); // b
console.log(b); // Uncaught ReferenceError: b is not defined
ES6์์ ๋์ ๋ let, const ํค์๋๋ ๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ๋ฅผ ์ง์ํ๋ค. ๋ฐ๋ผ์ ์ด๋ฅผ ์ด์ฉํ ๊ฒ์ด ๊ถ์ฅ๋๋ค.
๐ ๋ ์์ปฌ ์ค์ฝํ
๋์ ์ค์ฝํ : ํจ์๋ฅผ ์ด๋์ ํธ์ถํ๋์ง์ ๋ฐ๋ผ ํจ์์ ์์ ์ค์ฝํ๋ฅผ ๊ฒฐ์ ํ๋ค. ํจ์๊ฐ ํธ์ถ๋๋ ์์ ์ ๋์ ์ผ๋ก ์์ ์ค์ฝํ๋ฅผ ๊ฒฐ์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋์ ์ค์ฝํ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๋ ์์ปฌ ์ค์ฝํ : ํจ์๋ฅผ ์ด๋์ ์ ์ํ๋์ง์ ๋ฐ๋ผ ํจ์์ ์์ ์ค์ฝํ๋ฅผ ๊ฒฐ์ ํ๋ค. ์์ ์ค์ฝํ๊ฐ ๋์ ์ผ๋ก ๋ณํ์ง ์๊ณ ํจ์ ์ ์๊ฐ ํ๊ฐ๋๋ฏ๋ก ์ ์ ์ค์ฝํ๋ผ๊ณ ๋ถ๋ฅธ๋ค. js๋ฅผ ๋น๋กฏํ ๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ๋ ์์ปฌ ์ค์ฝํ๋ฅผ ๋ฐ๋ฅธ๋ค.
js๋ ๋ ์์ปฌ ์ค์ฝํ๋ฅผ ๋ฐ๋ฅด๋ฏ๋ก ํจ์๊ฐ ํธ์ถ๋ ์์น๋ ์์ ์ค์ฝํ ๊ฒฐ์ ์ ์ด๋ ํ ์ํฅ๋ ์ฃผ์ง ์๋๋ค. ์ฆ, ํจ์์ ์์ ์ค์ฝํ๋ ์ธ์ ๋ ์์ ์ด ์ ์๋ ์ค์ฝํ๋ค.
ํจ์ ์ ์๊ฐ ์คํ๋์ด ์์ฑ๋ ํจ์ ๊ฐ์ฒด๋ ์ด๋ ๊ฒ ๊ฒฐ์ ๋ ์์ ์ค์ฝํ๋ฅผ ๊ธฐ์ตํ๋ค. ํจ์๊ฐ ํธ์ถ๋ ๋๋ง๋ค ํจ์์ ์์ ์ค์ฝํ๋ฅผ ์ฐธ์กฐํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค.
var x = 1;
function foo() {
var x = 10;
bar();
}
function bar() {
console.log(x);
}
foo(); // 1
bar(); // 1
'TL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
03/09 TL. SOLID 5์์น(ts) (0) | 2022.03.10 |
---|---|
21.09.22 TL. js - ์์ฑ์ ํจ์์ ์ํ ๊ฐ์ฒด ์์ฑ (0) | 2021.09.22 |
21/09/13 TL. ์ปดํจํฐ ์์คํ ์ ๊ตฌ์กฐ (0) | 2021.09.14 |
21/09/12 TL. ์๋ฐ์คํฌ๋ฆฝํธ - ํจ์(1) (0) | 2021.09.12 |
21/09/11 TL. ๊ฐ์ฒด ๋ฆฌํฐ๋ด, ์์ ๊ฐ๊ณผ ๊ฐ์ฒด์ ๋น๊ต (0) | 2021.09.12 |
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค