1. ํจ์ function
๐ฐ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋จ์ ๋จ์ํ ๋์ ํ๋๋ง ์คํ๋๋๊ฒ ์๋๋ผ ์ฌ๋ฌ ๊ฐ์ง ๋์์ด ์ฐ๊ฒฐ๋๋ค
๐ฐ ์ด๋ ๊ฒ ๋์ํด์ผ ํ ๋ชฉ์ ๋๋ก ๋ฌถ์ ๋ช ๋ น์ ํจ์ function (= ์ฝ๋์ ์งํฉ) ์ด๋ผ ํจ
๐ฐ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ ๋ช ๋ น์ ์์๊ณผ ๋์ ๋ช ํํ๊ฒ ๊ตฌ๋ณํ ์ ์๊ณ ,
๋ฌถ์ ๊ธฐ๋ฅ์ ์ด๋ฆ์ ๋ถ์ฌ ํ์ํ ๋๋ง๋ค ํธ์ถํ์ฌ ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ
๐ก ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ข์ ์
1. ๋ฐ๋ณต๋๋ ์ฝ๋๋ฅผ ํ ๋ฒ๋ง ์ ๋ฆฌํด๋๊ณ ํ์ํ ๋๋ง๋ค ํธ์ถํ๋ฏ๋ก ๋ฐ๋ณต ์์ ์ ํผํ ์ ์๋ค
2. ๊ธด ํ๋ก๊ทธ๋จ์ ๊ธฐ๋ฅ๋ณ๋ก ๋๋ ์ฌ๋ฌ ํจ์๋ก ๋๋์ด ์์ฑํ๋ฉด ๋ชจ๋ํ๋ก ์ ์ฒด ์ฝ๋์ ๊ฐ๋ ์ฑ์ด ์ข์์ง๋ค.
3. ๊ธฐ๋ฅ๋ณ(ํจ์๋ณ)๋ก ์์ ์ด ๊ฐ๋ฅํ๋ฏ๋ก ์ ์ง๋ณด์๊ฐ ์ฝ๋ค.
๐ก ์ฉ์ด ์ ๋ฆฌ
· ํจ์ ์ ์ : ํจ์๋ฅผ ๋ง๋ ๊ฒ
· ํจ์ ํธ์ถ : ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ
· ์ธ์ : ํจ์๋ฅผ ํธ์ถํ ๋ ๊ดํธ ๋ด๋ถ์ ์ฌ๋ฌ๊ฐ์ง ์๋ฃ๋ฅผ ๋ฃ๋ ๊ฒ
· ๋งค๊ฐ๋ณ์ : ํจ์๋ฅผ ์ ์ํ ๋ ์ ๋ฌ๋ฐ์ ์ธ์๋ฅผ ์ ์ํ๋ ๊ฒ
· ๋ฆฌํด ๊ฐ : ํจ์๋ฅผ ํธ์ถํด์ ์ต์ข ์ ์ผ๋ก ๋์ค๋ ๊ฒฐ๊ณผ
1) ๋งค๊ฐ๋ณ์์ ๋ฆฌํด๊ฐ
๐ฏ ๋งค๊ฐ๋ณ์์ ๋ฆฌํด๊ฐ์ ํจ์์ ํ์ ์์๊ฐ ์๋๊ณ , ํ์ํ ๋๋ง ์ฌ์ฉ
/* ๊ธฐ๋ณธํ */
function ํจ์๋ช
(๋งค๊ฐ๋ณ์1, ๋งค๊ฐ๋ณ์2, ... ๋งค๊ฐ๋ณ์n) {
๋ฌธ์ฅ;
๋ฌธ์ฅ;
return ๋ฆฌํด๊ฐ;
}
<script>
const f = function (x) {
return x * x;
}
// ํจ์๋ฅผ ํธ์ถ
console.log(f(3)); // 9. ๋งค๊ฐ๋ณ์ x์ ์ ๋ฌ๋๋ ์ธ์๊ฐ 3์ด๊ณ ๋ฆฌํด๊ฐ์ด 9.
console.log(f()); // NaN
</script>
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ธ์์ ๋งค๊ฐ๋ณ์์ ๊ฐ์๊ฐ ๋ฌ๋ผ๋ ์๋ฌ๊ฐ ๋์ง ์์
<script>
const test1st = function (a) {
console.log(a);
}
test1st(); // undefined
test1st(1); // 1
test1st(1, 2); // 1
test1st(1, 2, 3); // 1
</script>
๋งค๊ฐ ๋ณ์๊ฐ ์๋ ํจ์ ์ ์๋ฌธ
<script>
const myFunc = function (name, area) {
document.write('์๋
ํ์ธ์. ' + name + '์
๋๋ค.', '<br>');
document.write('์ฌ๋๊ณณ์ ' + area + '์
๋๋ค.', '<br><br>');
};
myFunc('ํ๋น๋ฌด', '์์ธ');
myFunc('๊น๋๊ธฐ', '๋ถ์ฐ');
</script>
2) return ๋ฌธ
๐ฏ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๊ณ ๊ฐ์ ์ข
๋ฃ
๐ฏ return์ ์ญํ 1) ๋ฐ์ดํฐ๋ฅผ ๋ฐํ 2) ํจ์์ ๊ฐ์ ์ข
๋ฃ (๋ฐํ๊ฐ์ด ์์ด๋ ๋จ)
๋ฐ์ดํฐ ๋ฐํ
<script>
const getAvg = function (arrData) {
let sum = 0;
for(let i = 0; i < arrData.length; i++) {
sum += Number(prompt(`${arrData[i]} ์ ์๋ ?`, `0`));
}
const avg = sum / arrData.length;
return avg;
//alert(avg); // return ์ดํ์ ์ฝ๋๋ผ์ ์คํ์ด ์๋จ. (Unreachable code)
}
const arrSubject = ['๊ตญ์ด', '์ํ', '์์ด'];
const result = getAvg(arrSubject);
document.write(`ํ๊ท ์ ์๋ ${result}์ ์
๋๋ค.`);
</script>
๊ฐ์ ์ข ๋ฃ
<head>
<style>
* {
padding: 0;
margin: 0;
}
#galleryZone {
text-align: center;
}
</style>
<script>
let num = 1;
const showGallery = function (direction) {
/*
๋ค์์ ํด๋ฆญํ ๊ฒฝ์ฐ pic_1.jpg -> pic_2.jpg : ๋ฒํธ๊ฐ ์ฆ๊ฐ
์ด์ ์ ํด๋ฆญํ ๊ฒฝ์ฐ pic_9.jpg -> pic_8.jpg : ๋ฒํธ๊ฐ ๊ฐ์
*/
if (direction === 1) { // ๋ค์์ ํด๋ฆญํ ๊ฒฝ์ฐ
if (num === 9) {
alert('๋ง์ง๋ง ์ด๋ฏธ์ง์
๋๋ค');
return; // ์ด๋ฏธ์ง๊ฐ 9๊ฐ์ธ ๊ฒฝ์ฐ num์ด 9์ธ ๊ฒฝ์ฐ ํจ์ ์ข
๋ฃ
}
num++;
} else { // ์ด์ ์ ํด๋ฆญํ ๊ฒฝ์ฐ
if (num === 1) {
alert('์ฒซ ์ด๋ฏธ์ง์
๋๋ค.');
return; // ์ฒซ ์ด๋ฏธ์ง๊ฐ 1๋ฒ์ด์ด์ ์ข
๋ฃ
}
num--;
}
const imgTag = document.getElementById('photo'); // id ๊ฐ์ด photo์ธ ์์๋ฅผ ๊ฐ์ ธ์ด
imgTag.setAttribute('src', 'images/pic_' + num + '.jpg'); // id ๊ฐ์ด photo์ธ ์์์ src ์์ฑ์ ๋ณ๊ฒฝ
}
</script>
</head>
<body>
<div id ="galleryZone">
<p><img src="./images/pic_1.jpg" id="photo" alt=""></p>
<p>
<button onclick="showGallery(0)">์ด์ </button>
<button onclick="showGallery(1)">๋ค์</button>
</p>
</div>
</body>
2. ์ต๋ช
ํจ์ ์ ์ธํ๊ธฐ
๐ฐ ์ต๋ช
ํจ์ anonymous function : ์ด๋ฆ์ด ์๋ ํจ์
๐ฐ ์ต๋ช
ํจ์๋ ๋ณ์ ์ ์ธ(ํจ์ ์ ์) ํ ํธ์ถ ๊ฐ๋ฅ
๐ฐ ์ต๋ช
ํจ์๋ ๋์ผํ ์ด๋ฆ์ผ๋ก ์ฌ์ ์ธ ๋ถ๊ฐ๋ฅ. let๊ณผ const์ ํน์ง
๊ธฐ๋ณธํ : function () {}
<!-- ๋ณ์ ํ ๋น -->
let ๋ณ์ = function () {
์คํ๋ฌธ;
}
<script>
// ๋ณ์๋ฅผ ์ ์ธํด์ ํจ์๋ฅผ ํ ๋น.
const func = function () {
console.log('ํจ์ ๋ด๋ถ์ ์ฝ๋์
๋๋ค ... 1');
console.log('ํจ์ ๋ด๋ถ์ ์ฝ๋์
๋๋ค ... 2');
console.log('ํจ์ ๋ด๋ถ์ ์ฝ๋์
๋๋ค ... 3');
console.log('');
}
// ํจ์๋ฅผ ํธ์ถ
func();
func();
// ์ถ๋ ฅ
console.log(typeof func); // function. ํจ์์ ์๋ฃํ ํ์ธ
console.log(func); // ํจ์ ์์ฒด๋ ๋จ์ํ ์๋ฃ์ด๋ฏ๋ก ์ถ๋ ฅํ ์ ์์.
</script>
<script>
/* ์ ์ธ ์ ํธ์ถ์ */
compute(); // Uncaught ReferenceError: Cannot access 'compute' before initialization
let compute = function() {
let x = 10;
let y = 100;
let result = x * y;
console.log(result);
};
compute(); // 1000
</script>
<script>
/* ์ฌ์ ์ธ ์ */
let compute = function() {
let x = 10;
let y = 100;
let result = x * y;
console.log(result);
}; // Uncaught SyntaxError: Identifier 'compute' has already been declared
</script>
3. ์ ์ธ์ ํจ์
๐ฐ ์ ์ธ์ ํจ์ : ์ด๋ฆ์ด ์๋ ํจ์
๐ฐ ์ ์ธ์ ํจ์๋ ์ฌ์ ์ ๊ฐ๋ฅ
๊ธฐ๋ณธํ : function ํจ์ ์ด๋ฆ () {}
โ๏ธ ๋๋ถ๋ถ์ ํ๋ก๊ทธ๋จ์ ์ ์ธ์ ํจ์๋ง ์ฌ์ฉํ๊ฑฐ๋(C),
์ ์ธ์ ํจ์๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๊ณ ์ต๋ช
ํจ์๋ฅผ ๋ณด์กฐ์ ์ธ ์๋จ(C++, ์๋ฐ์ ๋๋ค)์ผ๋ก ์ฌ์ฉ
โ๏ธ ์๋ฐ์คํฌ๋ฆฝํธ๋ ํจ์์งํฅ ํ๋ก๊ทธ๋จ(ECMA script 6 ์ดํ)์ด๋ผ์ ๋ณ์์ ํจ์ ํ ๋นํ๊ฑฐ๋,
์ต๋ช
ํจ์๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๊ณ ์ ์ธ์ ํจ์๋ฅผ ๋ณด์กฐ์ ์ธ ์๋จ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ ์งํฅํจ.
<script>
// ํจ์๋ฅผ ์์ฑ
function func1st () {
console.log('ํจ์ ๋ด๋ถ์ ์ฝ๋์
๋๋ค ... 1');
console.log('ํจ์ ๋ด๋ถ์ ์ฝ๋์
๋๋ค ... 2');
console.log('ํจ์ ๋ด๋ถ์ ์ฝ๋์
๋๋ค ... 3');
console.log('');
}
// ํจ์๋ฅผ ํธ์ถ
func1st();
func1st();
// ์ถ๋ ฅ
console.log(typeof func1st); // function
console.log(func1st);
</script>
๋์ผํ ์ด๋ฆ์ ํจ์๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ
- ์ ์ธ์ ํจ์์ ๊ฒฝ์ฐ ๋์ผํ ์ด๋ฆ์ ํจ์๊ฐ ์กด์ฌํ๋ฉด ๋ค์ ์ ์ธ๋ ํจ์๊ฐ ์คํ์ด ๋จ
<script>
let num = 100;
function menu() {
num += 100;
document.write(num, ": ์์ ํจ์ ์คํ<br>");
}
menu(); // 100: ๋ค์ ํจ์ ์คํ
function menu() {
document.write(num, ": ๋ค์ ํจ์ ์คํ<br>");
}
</script>
๐ก ์ ์ธ์ ํจ์๋ฅผ ๋ณ์์ ํ ๋นํ๋ ๋ฐฉ๋ฒ
1. ๋ณ์์ ํ ๋นํ๋ฉด์ ์ ์ธ์ ํจ์ ์ ์ธ
โก๏ธ ๋ณ์์ ํ ๋นํ๋ฉด์ ์ ์ธ์ ํจ์๋ฅผ ์ ์ธํ๋ฉด ์ต๋ช ํจ์๋ก ์ฒ๋ฆฌ
2. ์ ์ธ์ ํจ์๋ฅผ ์ ์ธ ํ์ ๋ณ์์ ํ ๋น
<script>
// 1. ๋ณ์์ ํ ๋นํ๋ฉด์ ์ ์ธ์ ํจ์ ์ ์ธ
const func2nd = function namedFunc2nd() { // ๋ณ์๋ฅผ ์ ์ธํด์ ํจ์๋ฅผ ํ ๋น
console.log('namedFunc2nd() ํจ์ ๋ด๋ถ์ ์ฝ๋์
๋๋ค ...');
console.log('');
}
// ํธ์ถ
func2nd(); // ๋ณ์๋ฅผ ํตํด ํจ์๋ฅผ ํธ์ถ.
// namedFunction(); // Uncaught ReferenceError: namedFunction is not defined\
console.log(typeof func2nd); // function. ํจ์์ ์๋ฃํ ํ์ธ
// 2. ์ ์ธ์ ํจ์๋ฅผ ์ ์ธ ํ์ ๋ณ์์ ํ ๋น
function namedFunc() {
console.log('namedFunc() ํจ์ ๋ด๋ถ์ ์ฝ๋์
๋๋ค ...');
console.log('');
}
const func1st = namedFunc; // ์ ์ธ์ ํจ์๋ฅผ ๋ณ์์ ํ ๋น.
func1st(); // ๋ณ์๋ฅผ ํตํด ํจ์ ํธ์ถ
namedFunc(); // ํจ์๋ฅผ ํธ์ถ
console.log(typeof func1st); // function. ์๋ฃํ ํ์ธ
</script>
4. ํธ์ด์คํ Hoisting
๐ฐ var๋ก ์ ์ธํ ๋ณ์ or ์ ์ธ์ ํจ์๋ ๋ณ์๋ ํจ์ ์ด์ ์ ํธ์ถํ์ฌ๋ ์๋ฌ๋ฅผ ๋ฐ์ํ์ง ์์
๐ฐ ์๋ฐ์คํฌ๋ฆฝํธ ํด์๊ธฐ๋ ์์ค๋ฅผ ํ๊ณ var๋ฅผ ์ฌ์ฉํ ๋ณ์๋ ์คํํ๊ธฐ์ ์ ๊ธฐ์ตํด ๋๊ธฐ ๋๋ฌธ์ ์ ์ธํ ๊ฒ๊ณผ ๊ฐ์ ํจ๊ณผ๊ฐ ์๋ค
<script>
compute(); // 110. ์ ์ธ์ ํจ์๋ ํจ์ ์ ์ ์ ์ ์ฌ์ฉ๊ฐ๋ฅ.
function compute() {
let x = 10;
let y = 100;
let result = x + y;
console.log(result);
}
compute(); // 110
</script>
[ ๋ด์ฉ ์ฐธ๊ณ : IT ํ์ ๊ฐ์ ๋ฐ ์ฑ 'Do it HTML+CSS+์๋ฐ์คํฌ๋ฆฝํธ ์น ํ์ค์ ์ ์' ]
'Programming Language > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] ๋๋จธ์ง ๋งค๊ฐ๋ณ์์ ์ ๊ฐ ์ฐ์ฐ์ (0) | 2024.03.29 |
---|---|
[JavaScript] ์ฌ์ฉ์ ์ ์ ํจ์ ์์ (0) | 2024.03.28 |
[JavaScript] ๋ฐฐ์ด(Array)์ด๋, ์์ ์ถ๊ฐ ๋ฐ ์ ๊ฑฐ (0) | 2024.03.28 |
[JavaScript] ๋ฐ๋ณต๋ฌธ | for๋ฌธ, while๋ฌธ, break๋ฌธ, continue๋ฌธ (0) | 2024.03.28 |
[JavaScript] if ์กฐ๊ฑด๋ฌธ (if-else & else-if), switch ๋ฌธ (1) | 2024.03.28 |