** ๐1๏ธโฃ ํจ์ 4์ข ์๋ฒฝ ๋น๊ต**
ํจ์ ์ ํ | ์ ์ธ ๋ฐฉ์ | ํธ์ด์คํ | this ๋ฐ์ธ๋ฉ |
ํน์ง & ์ฃผ์ |
---|---|---|---|---|
ํจ์ ์ ์ธ์ | function func() {} |
O (์๋ก ๋์ด์ฌ๋ฆผ) | ํธ์ถ ์ปจํ ์คํธ ๊ธฐ์ค | ๊ธฐ๋ณธ ํจ์ |
ํจ์ ํํ์ | const func = function() {} |
X | ์คํ ์ ๊ฒฐ์ | ๋ณ์ ๊ธฐ์ค |
ํ์ดํ ํจ์ | const func = () => {} |
X | ์์ ์ค์ฝํ์ this |
๊ฐ๋ณ๊ณ , arguments ์์ |
IIFE | (function(){})() |
X | ์ฆ์ ์คํ | ์ค์ฝํ ๋ณดํธ (์ ์ญ ์ค์ผ ๋ฐฉ์ง) |
๐ ์์ ๋น๊ต
// ํจ์ ์ ์ธ์
hoisted();
function hoisted() { console.log('์ ์ธ์ ํธ์ถ๋จ!'); }
// ํจ์ ํํ์
// notHoisted(); // Error
const notHoisted = function() { console.log('ํํ์ ํธ์ถ'); };
// ํ์ดํ ํจ์ (this โ ์์ ์ค์ฝํ)
const arrow = () => console.log(this);
// IIFE
(function() { console.log('์ฆ์ ์คํ!'); })();
๐ง 2๏ธโฃ this
๋ฐ์ธ๋ฉ ์ฌํ ๋น๊ต
ํจ์ ์ข ๋ฅ | this ๊ฒฐ์ ๋ฐฉ์ |
---|---|
์ผ๋ฐ ํจ์ | ํจ์ ํธ์ถ ์ปจํ ์คํธ (์ด๋ป๊ฒ ํธ์ถํ๋๊ฐ) |
ํ์ดํ ํจ์ | ์์ ์ค์ฝํ์ this ์ฌ์ฉ (๋ ์์ปฌ ๋ฐ์ธ๋ฉ) |
๐ ์์
const obj = {
name: 'JS',
regularFunc: function() {
console.log(this.name); // 'JS'
},
arrowFunc: () => {
console.log(this.name); // undefined (์์ ์ค์ฝํ)
}
};
obj.regularFunc();
obj.arrowFunc();
๐ฅ 3๏ธโฃ ํด๋ก์ (Closure) ์๋ฒฝ ํด๋ถ
๐งฉ ์ ์:
โํจ์์ ๊ทธ ํจ์๊ฐ ์ ์ธ๋ ๋ ์์ปฌ ํ๊ฒฝ(์ค์ฝํ)์ ๊ธฐ์ตํ๋ ํจ์โ
๐ ํต์ฌ ํน์ง:
- ์ธ๋ถ ํจ์์ ๋ณ์๋ฅผ ๋ด๋ถ ํจ์๊ฐ ๊ธฐ์ต
- ์ธ๋ถ ํจ์๊ฐ ์ข ๋ฃ๋์ด๋ ๋ด๋ถ ํจ์๊ฐ ๋ณ์ ์ ๊ทผ ๊ฐ๋ฅ
๐ ๊ธฐ๋ณธ ์์
function outer() {
let count = 0;
return function inner() {
count++;
console.log(count);
};
}
const counter = outer();
counter(); // 1
counter(); // 2
โ ๏ธ ๋ฉ๋ชจ๋ฆฌ ๋์ ์ฃผ์ ํฌ์ธํธ
function createHeavy() {
let largeData = new Array(1000000).fill('data');
return function() {
console.log(largeData[0]);
};
}
const heavy = createHeavy();
// heavy ์ฌ์ฉ ํ ์ฐธ์กฐ ํด์ ํ์ง ์์ผ๋ฉด largeData ๊ณ์ ๋ฉ๋ชจ๋ฆฌ ์ ์
โ ์ค๋ฌด ํ:
์ด๋ฒคํธ ๋ฆฌ์ค๋, ํ์ด๋จธ ๋ด ํด๋ก์ โ ๋ฐ๋์ ํด์ ํ์
๐ 4๏ธโฃ ์ฝ๋ฐฑ ํจ์ (Callback)
๐ ์ ์:
๋ค๋ฅธ ํจ์์ ์ธ์๋ก ์ ๋ฌ๋์ด ์คํ๋๋ ํจ์
๐ ์์
function greet(callback) {
console.log('Hello');
callback();
}
greet(function() { console.log('Callback ์คํ!'); });
๐ข ๋น์ :
โ์ผ ๋๋๋ฉด ์๋ ค์ค!โ โ ์ฝ๋ฐฑ ๋ฑ๋ก ํ ํธ์ถ
๐ 5๏ธโฃ ๊ณ ์ฐจ ํจ์ (Higher-Order Function)
๐ ์ ์:
ํจ์๋ฅผ ์ธ์๋ก ๋ฐ๊ฑฐ๋, ํจ์๋ฅผ ๋ฐํํ๋ ํจ์
๐ ๋ํ ์์
function multiplier(factor) {
return function(number) {
return number * factor;
};
}
const double = multiplier(2);
console.log(double(5)); // 10
โ ์ค๋ฌด์์ ๋ํ ๊ณ ์ฐจ ํจ์:
map()
,filter()
,reduce()
,sort()
๋ฑ
๐ง 6๏ธโฃ ์ค๋ฌด & ๊ธฐ์ ๋ฉด์ ํฌ์ธํธ
์ง๋ฌธ | ํต์ฌ ํฌ์ธํธ |
---|---|
ํจ์ ์ ์ธ์ vs ํํ์ ์ฐจ์ด? | ํธ์ด์คํ ์ฌ๋ถ, ์ ์ธ ์์น |
ํ์ดํ ํจ์์ this ๋? |
์์ ์ค์ฝํ์ this ๋ฐ์ธ๋ฉ |
ํด๋ก์ ๋? | ์ธ๋ถ ์ค์ฝํ ๊ธฐ์ต, ์ํ ์ ์ง |
ํด๋ก์ ๋ฉ๋ชจ๋ฆฌ ๋์ ์ธ์ ? | ์ด๋ฒคํธ ๋ฆฌ์ค๋, ์ฐธ์กฐ ๋จ์ ๋ |
๊ณ ์ฐจ ํจ์ ์์? | map, filter, reduce, ์ปค์คํ ๊ณ ์ฐจ |
IIFE ๋ชฉ์ ? | ์ ์ญ ์ค์ฝํ ์ค์ผ ๋ฐฉ์ง, ๋ชจ๋ํ |
๐ 7๏ธโฃ ๋ ธ์ ์ฉ ์ ๋ฆฌ ํ
๐ ํจ์ ์ ํ ๋น๊ต
ํจ์ ์ ํ | ์ ์ธ ๋ฐฉ์ | ํธ์ด์คํ | this ๋ฐ์ธ๋ฉ |
ํน์ง |
---|---|---|---|---|
ํจ์ ์ ์ธ์ | function func(){} |
O | ํธ์ถ ์ปจํ ์คํธ | ๊ธฐ๋ณธ ํจ์ |
ํจ์ ํํ์ | const func = function(){} |
X | ์คํ ์ ๊ฒฐ์ | ๋ณ์ ๊ธฐ์ค |
ํ์ดํ ํจ์ | const func = () => {} |
X | ์์ ์ค์ฝํ | arguments ์์ |
IIFE | (function(){})() |
X | ์ฆ์ ์คํ | ์ค์ฝํ ๋ณดํธ |
๐ ํต์ฌ ๊ฐ๋ ์์ฝ
๊ฐ๋ | ์ ์ | ์ค๋ฌด ํ์ฉ |
---|---|---|
ํด๋ก์ | ์ธ๋ถ ์ค์ฝํ ๊ธฐ์ต | ์ํ ์ ์ง, ๋ชจ๋ ํจํด |
์ฝ๋ฐฑ | ์ธ์๋ก ์ ๋ฌ๋๋ ํจ์ | ๋น๋๊ธฐ ์ฒ๋ฆฌ |
๊ณ ์ฐจ ํจ์ | ํจ์ ์ธ์/๋ฐํ | map, filter ๋ฑ |
this | ํธ์ถ ์ปจํ ์คํธ | ๊ฐ์ฒด ๋ฉ์๋, ์ด๋ฒคํธ |
๐ 8๏ธโฃ ์ถ๊ฐ ์ฌํ ํ์ฅ ๊ฐ๋ฅ
- call, apply, bind๋ก this ๋ฐ์ธ๋ฉ ๊ฐ์ ์ ์ด
- ํด๋ก์ ๊ธฐ๋ฐ ๋ชจ๋ ํจํด ์ค๋ฌด ์์
- ๊ณ ์ฐจ ํจ์ ์ฌํ (์ปค์คํ filter, reduce ์ง์ ๊ตฌํ)
- ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐฉ์ง Best Practice
๐ ํจ์ 1
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>JavaScript Function Masterclass ๐</title>
<style>
div {
border: 1px solid black;
padding: 10px;
margin: 10px 0;
}
button {
margin: 5px;
}
</style>
</head>
<body>
<h1>โจ ์๋ฐ์คํฌ๋ฆฝํธ ํจ์ ์๋ฒฝ ๊ฐ์ด๋ โจ</h1>
<!-- ==================== 1. ์ ์ธ์ ํจ์ ==================== -->
<h2>๐ 1. ์ ์ธ์ ํจ์ (Declarative Function)</h2>
<p>โ
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ํจ์ ์ ์ธ ๋ฐฉ๋ฒ (ํธ์ด์คํ
๊ฐ๋ฅ)</p>
<button onclick="basicFunction()">์ ์ธ์ ํจ์ ์คํ</button>
<div id="area1"></div>
<script>
// ๐ข ์ ์ธ์ ํจ์ (ํธ์ถ ๊ฐ๋ฅ: ํธ์ด์คํ
๋จ)
function basicFunction() {
document.getElementById("area1").innerHTML += "โ
์ ์ธ์ ํจ์ ํธ์ถ๋จ!<br>";
}
</script>
<!-- ==================== 2. ํจ์ ํํ์ (์ต๋ช
ํจ์ ํฌํจ) ==================== -->
<h2>๐ 2. ํจ์ ํํ์ & ์ต๋ช
ํจ์ (Function Expression)</h2>
<p>ํจ์๋ฅผ ๋ณ์์ ํ ๋น! ์ต๋ช
ํจ์๋ ์ด๋ฆ ์์ด ๋์
๋จ</p>
<button onclick="anonFunc()">์ต๋ช
ํจ์ ์คํ</button>
<div id="area2"></div>
<script>
// ๐ข ํจ์ ํํ์ (ํธ์ด์คํ
์๋จ)
const anonFunc = function () {
document.getElementById("area2").innerHTML += "โ
์ต๋ช
ํจ์ ์คํ๋จ (๋ณ์์ ๋์
)<br>";
};
</script>
<!-- ==================== 3. ํ์ดํ ํจ์ ==================== -->
<h2>๐ 3. ํ์ดํ ํจ์ (Arrow Function) ๐ฅ</h2>
<p>๋ ์งง๊ณ ๊ฐ๊ฒฐํ๋ฉฐ, this ๋ฐ์ธ๋ฉ ์์!</p>
<button onclick="arrowFunc()">ํ์ดํ ํจ์ ์คํ</button>
<div id="area3"></div>
<script>
// ๐ข ํ์ดํ ํจ์
const arrowFunc = () => {
document.getElementById("area3").innerHTML += "โ
ํ์ดํ ํจ์ ์คํ๋จ!<br>";
};
</script>
<!-- ==================== 4. ๋งค๊ฐ๋ณ์ & ๊ธฐ๋ณธ๊ฐ ==================== -->
<h2>๐ 4. ๋งค๊ฐ๋ณ์ & ๊ธฐ๋ณธ๊ฐ ์ค์ </h2>
<button onclick="paramFunc('Hi ๐โโ๏ธ')">๋งค๊ฐ๋ณ์ ์ ๋ฌ</button>
<button onclick="paramFunc()">๊ธฐ๋ณธ๊ฐ ํ์ธ</button>
<div id="area4"></div>
<script>
// ๐ข ๋งค๊ฐ๋ณ์ ๊ธฐ๋ณธ๊ฐ
function paramFunc(msg = "๐ ๊ธฐ๋ณธ ๋ฉ์์ง!") {
document.getElementById("area4").innerHTML += `โก๏ธ ${msg}<br>`;
}
</script>
<!-- ==================== 5. ๋๋จธ์ง ๋งค๊ฐ๋ณ์ & arguments ==================== -->
<h2>๐ 5. ๋๋จธ์ง ๋งค๊ฐ๋ณ์ (...rest) & arguments</h2>
<button onclick="restExample(1, 2, 3, 4, 5)">๋๋จธ์ง ๋งค๊ฐ๋ณ์</button>
<button onclick="argExample('A', 'B', 'C')">arguments ์ฌ์ฉ</button>
<div id="area5"></div>
<script>
// ๐ข ๋๋จธ์ง ๋งค๊ฐ๋ณ์
function restExample(...nums) {
document.getElementById("area5").innerHTML += `๋ฐ์ ๊ฐ๋ค: ${nums.join(", ")}<br>`;
}
// ๐ข arguments (์๋ ๋ฐฉ์)
function argExample() {
let result = "";
for (let i = 0; i < arguments.length; i++) {
result += arguments[i] + " ";
}
document.getElementById("area5").innerHTML += `arguments๋ก ๋ฐ์ ๊ฐ: ${result}<br>`;
}
</script>
<!-- ==================== 6. ๋ฐํ๊ฐ ==================== -->
<h2>๐ 6. ๋ฐํ๊ฐ (return)</h2>
<button onclick="showSum()">๋ฐํ๊ฐ ํ์ธ</button>
<div id="area6"></div>
<script>
function sum(a, b) {
return a + b; // ๐ก ๋จ์ ๋ํ๊ธฐ
}
function showSum() {
const result = sum(7, 8);
document.getElementById("area6").innerHTML += `7 + 8 = ${result}<br>`;
}
</script>
<!-- ==================== 7. ํจ์๊ฐ ํจ์ ๋ฐํ ==================== -->
<h2>๐ 7. ํจ์๊ฐ ๋ ๋ค๋ฅธ ํจ์ ๋ฐํ (๊ณ ์ฐจ ํจ์ ๊ฐ๋
)</h2>
<button onclick="returnFunc()">ํจ์ ๋ฐํ ์คํ</button>
<div id="area7"></div>
<script>
function outer() {
return function inner() {
document.getElementById("area7").innerHTML += "โ
๋ด๋ถ ํจ์ ์คํ๋จ!<br>";
};
}
function returnFunc() {
const inner = outer();
inner();
}
</script>
<!-- ==================== 8. ์ฝ๋ฐฑ ํจ์ ==================== -->
<h2>๐ 8. ์ฝ๋ฐฑ ํจ์ (Callback Function)</h2>
<button onclick="useCallback()">์ฝ๋ฐฑ ํจ์ ์คํ</button>
<div id="area8"></div>
<script>
function greet(name, callback) {
const msg = `๐ Hello, ${name}!`;
callback(msg); // ์ฝ๋ฐฑ ํธ์ถ
}
function display(msg) {
document.getElementById("area8").innerHTML += `${msg}<br>`;
}
function useCallback() {
greet("Bob", display);
}
</script>
<!-- ==================== 9. ์ฆ์ ์คํ ํจ์ (IIFE) ==================== -->
<h2>๐ 9. ์ฆ์ ์คํ ํจ์ (IIFE)</h2>
<div id="area9"></div>
<script>
(function () {
document.getElementById("area9").innerHTML += "โ
์ฆ์ ์คํ ํจ์ ์คํ๋จ!<br>";
})();
</script>
<!-- ==================== 10. ํด๋ก์ (Closure) ์ถ๊ฐ ==================== -->
<h2>๐ 10. ํด๋ก์ (Closure) - ์ฌํ</h2>
<button onclick="closureExample()">ํด๋ก์ ์คํ</button>
<div id="area10"></div>
<script>
function makeCounter() {
let count = 0; // ๐ฉ ์ธ๋ถ ๋ณ์
return function () {
count++;
document.getElementById("area10").innerHTML += `ํ์ฌ ์นด์ดํธ: ${count}<br>`;
};
}
const closureExample = makeCounter(); // ๋ฐํ๋ ํจ์๊ฐ count ๊ธฐ์ต
</script>
<!-- ==================== 11. ์ฌ๊ท ํจ์ (Recursion) ์ถ๊ฐ ==================== -->
<h2>๐ 11. ์ฌ๊ท ํจ์ (Recursion) - ์ฌํ</h2>
<button onclick="factorialResult()">ํฉํ ๋ฆฌ์ผ ๊ณ์ฐ</button>
<div id="area11"></div>
<script>
function factorial(n) {
if (n === 1) return 1;
return n * factorial(n - 1); // ์๊ธฐ ์์ ํธ์ถ
}
function factorialResult() {
const result = factorial(5);
document.getElementById("area11").innerHTML += `5! = ${result}<br>`;
}
</script>
<!-- ๐ฏ [์ฌํ] this ์ปจํ
์คํธ + ํจ์ ํํ์ vs ํ์ดํ ํจ์ ๋น๊ต -->
<h3>๐งญ this ์ปจํ
์คํธ ์ดํดํ๊ธฐ: ํจ์ ํํ์ vs ํ์ดํ ํจ์</h3>
<button onclick="testThis()">this ํ
์คํธ ์คํ</button>
<div id="quiz4"></div>
<script>
const obj = {
name: "MyObject",
// ํจ์ ํํ์: this๋ obj๋ฅผ ๊ฐ๋ฆฌํด
showNameFunc: function () {
return `ํจ์ ํํ์: ${this.name}`;
},
// ํ์ดํ ํจ์: this๋ window (์ ์ญ)
showNameArrow: () => {
return `ํ์ดํ ํจ์: ${this.name}`; // ์ ์ญ์ name ์์(undefined)
}
};
function testThis() {
let text = obj.showNameFunc() + "<br>" + obj.showNameArrow();
document.getElementById("quiz4").innerHTML = text;
}
</script>
</body>
</html>
๐ ๋ฐฐ์ด
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>๋ฐฐ์ด ๋ฉ์๋ ์๋ฒฝ ์ ๋ฆฌ ๐</title>
<style>
.area {
border: 1px solid #ccc;
padding: 10px;
margin: 10px 0;
background-color: #f9f9f9;
}
</style>
</head>
<body>
<h2>๐ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐฐ์ด ๋ฉ์๋ ์๋ฒฝ ์ ๋ฆฌ</h2>
<!-- โ
concat -->
<h3>1๏ธโฃ ๋ฐฐ์ด.concat()</h3>
<div id="area1" class="area"></div>
<button onclick="concatTest()">concat ํ์ธํ๊ธฐ</button>
<!-- โ
reverse -->
<h3>2๏ธโฃ ๋ฐฐ์ด.reverse()</h3>
<div id="area2" class="area"></div>
<button onclick="reverseTest()">reverse ํ์ธํ๊ธฐ</button>
<!-- โ
sort -->
<h3>3๏ธโฃ ๋ฐฐ์ด.sort()</h3>
<div id="area3" class="area"></div>
<button onclick="sortTest()">sort ํ์ธํ๊ธฐ</button>
<!-- โ
push & pop -->
<h3>4๏ธโฃ ๋ฐฐ์ด.push() & pop()</h3>
<div id="area4" class="area"></div>
<button onclick="pushPopTest()">push/pop ํ์ธํ๊ธฐ</button>
<!-- โ
unshift & shift -->
<h3>5๏ธโฃ ๋ฐฐ์ด.unshift() & shift()</h3>
<div id="area5" class="area"></div>
<button onclick="shiftUnshiftTest()">unshift/shift ํ์ธํ๊ธฐ</button>
<script>
// ============================
// 1๏ธโฃ concat() ๊ธฐ์ด ~ ์ฌํ
// ============================
function concatTest() {
const area1 = document.querySelector("#area1");
const arr1 = ["๐์ฌ๊ณผ", "๐๋ฐ๋๋"];
const arr2 = ["๐ง์น์ฆ", "๐ฅ๋ฒ ์ด์ปจ", "๐๏ธ์คํ ๋ฐ์ด"];
area1.innerHTML = "โ
arr1 : " + JSON.stringify(arr1) + "<br>";
area1.innerHTML += "โ
arr2 : " + JSON.stringify(arr2) + "<br><br>";
const combined = arr1.concat(arr2);
area1.innerHTML += "๐ arr1.concat(arr2) : " + JSON.stringify(combined) + "<br>";
area1.innerHTML += "๐ arr1 (์๋ณธ ์ ์ง) : " + JSON.stringify(arr1) + "<br><br>";
const reverseCombined = arr2.concat(arr1);
area1.innerHTML += "๐ arr2.concat(arr1) : " + JSON.stringify(reverseCombined) + "<br><br>";
const multiCombined = arr2.concat(arr1, ["๐ฎ๊ฒ์๊ธฐ", "๐ฑ์ค๋งํธํฐ"]);
area1.innerHTML += "๐ arr2.concat(arr1, ์ถ๊ฐ๋ฐฐ์ด) : " + JSON.stringify(multiCombined) + "<br><br>";
const nestedArr = [[1, 2], [3, 4]];
const flat = arr1.concat(nestedArr);
area1.innerHTML += "โ ๏ธ ์ค์ฒฉ ๋ฐฐ์ด : " + JSON.stringify(flat) + "<br>";
area1.innerHTML += "โ ์ค์ฒฉ๋ ๋ฐฐ์ด์ ํํํ ์๋จ (flat ์๋!)<br>";
}
// ============================
// 2๏ธโฃ reverse() ๊ธฐ์ด ~ ์ฌํ
// ============================
function reverseTest() {
const area2 = document.querySelector("#area2");
const arr = [1, 2, 3, 4, 5];
area2.innerHTML = "โ
์๋ณธ arr : " + JSON.stringify(arr) + "<br>";
const reversed = arr.reverse();
area2.innerHTML += "๐ reverse() ํ arr : " + JSON.stringify(reversed) + "<br><br>";
area2.innerHTML += "โ ๏ธ ๋ค์ arr ์ถ๋ ฅ : " + JSON.stringify(arr) + "<br>";
const str = "Hello World!";
const reversedStr = str.split("").reverse().join("");
area2.innerHTML += "๐ฏ ๋ฌธ์์ด ๋ค์ง๊ธฐ : " + reversedStr + "<br>";
}
// ============================
// 3๏ธโฃ sort() ๊ธฐ์ด ~ ์ฌํ
// ============================
function sortTest() {
const area3 = document.querySelector("#area3");
const names = ["๋ฌธ๊ทผ์", "๊น์ฟ๊ฐ", "์ด๋ชฝ๋ฃก", "ํ๊ธธ๋", "๊น์ฟ๊ฐ"];
area3.innerHTML = "โ
์๋ณธ names : " + JSON.stringify(names) + "<br>";
names.reverse();
area3.innerHTML += "๐ reverse ํ : " + JSON.stringify(names) + "<br>";
names.sort();
area3.innerHTML += "๐ค sort() ์ค๋ฆ์ฐจ์ : " + JSON.stringify(names) + "<br>";
names.sort().reverse();
area3.innerHTML += "๐ฝ sort() + reverse() ๋ด๋ฆผ์ฐจ์ : " + JSON.stringify(names) + "<br><br>";
const numbers = [100, 25, 3, 56, 789, 12];
area3.innerHTML += "โ
์ซ์ ๋ฐฐ์ด : " + JSON.stringify(numbers) + "<br>";
numbers.sort();
area3.innerHTML += "โ ๏ธ ์๋ชป๋ sort ๊ฒฐ๊ณผ : " + JSON.stringify(numbers) + "<br>";
numbers.sort((a, b) => a - b);
area3.innerHTML += "โ๏ธ ์ซ์ ์ค๋ฆ์ฐจ์ : " + JSON.stringify(numbers) + "<br>";
numbers.sort((a, b) => b - a);
area3.innerHTML += "โ๏ธ ์ซ์ ๋ด๋ฆผ์ฐจ์ : " + JSON.stringify(numbers) + "<br><br>";
const students = [
{ name: "ํ๊ธธ๋", score: 85 },
{ name: "์ด๋ชฝ๋ฃก", score: 95 },
{ name: "์ฑ์ถํฅ", score: 75 },
];
area3.innerHTML += "โ
ํ์ ์ ์ ๋ฐฐ์ด : " + JSON.stringify(students) + "<br>";
students.sort((a, b) => a.score - b.score);
area3.innerHTML += "๐ ์ ์ ์ค๋ฆ์ฐจ์ : " + JSON.stringify(students) + "<br>";
students.sort((a, b) => b.score - a.score);
area3.innerHTML += "๐ ์ ์ ๋ด๋ฆผ์ฐจ์ : " + JSON.stringify(students) + "<br>";
}
// ============================
// 4๏ธโฃ push() & pop() ๊ธฐ์ด ~ ์ฌํ
// ============================
function pushPopTest() {
const area4 = document.querySelector("#area4");
const arr = ["์์ด๋", "์ฐ์ฐ์ฐ๋", "์ฐ์ ๋", "๊ฐ์ฐ๋", "๋น
๋ฒ ๋"];
area4.innerHTML = "โ
์ด๊ธฐ arr : " + JSON.stringify(arr) + "<br>";
// push ์ฌ์ฉ (๋งจ ๋์ ์ถ๊ฐ)
const pushResult = arr.push("์ ๋๋ฆผ๋");
area4.innerHTML += `๐ arr.push("์ ๋๋ฆผ๋") ํ : ${JSON.stringify(arr)} (์ ๊ธธ์ด: ${pushResult})<br>`;
arr.push("๋ฏธ์๋");
area4.innerHTML += `๐ arr.push("๋ฏธ์๋") ํ : ${JSON.stringify(arr)}<br>`;
// pop ์ฌ์ฉ (๋งจ ๋ ์ญ์ )
const popped1 = arr.pop();
area4.innerHTML += `โ arr.pop() ํ (์ญ์ ๋ ๊ฐ: ${popped1}) : ${JSON.stringify(arr)}<br>`;
const popped2 = arr.pop();
area4.innerHTML += `โ arr.pop() ํ (์ญ์ ๋ ๊ฐ: ${popped2}) : ${JSON.stringify(arr)}<br>`;
// ์ต์ข
๊ฒฐ๊ณผ
area4.innerHTML += "โ
์ต์ข
arr : " + JSON.stringify(arr) + "<br>";
}
// ============================
// 5๏ธโฃ unshift() & shift() ๊ธฐ์ด ~ ์ฌํ
// ============================
function shiftUnshiftTest() {
const area5 = document.querySelector("#area5");
const arr = ["๋๊ตฌ", "์ผ๊ตฌ", "๊ณจํ", "ํ
๋์ค"];
area5.innerHTML = "โ
์ด๊ธฐ arr : " + JSON.stringify(arr) + "<br><br>";
// unshift() - ๋งจ ์์ ์ถ๊ฐ
const unshiftLength = arr.unshift("ํ๊ตฌ");
area5.innerHTML += `๐ arr.unshift("ํ๊ตฌ") ํ : ${JSON.stringify(arr)} (์ ๊ธธ์ด: ${unshiftLength})<br>`;
arr.unshift("๋ฐฐ๋๋ฏผํด");
area5.innerHTML += `๐ arr.unshift("๋ฐฐ๋๋ฏผํด") ํ : ${JSON.stringify(arr)}<br><br>`;
// shift() - ๋งจ ์ ์ญ์
const shifted1 = arr.shift();
area5.innerHTML += `โ arr.shift() ํ (์ญ์ ๋ ๊ฐ: ${shifted1}) : ${JSON.stringify(arr)}<br>`;
const shifted2 = arr.shift();
area5.innerHTML += `โ arr.shift() ํ (์ญ์ ๋ ๊ฐ: ${shifted2}) : ${JSON.stringify(arr)}<br><br>`;
area5.innerHTML += "โ
์ต์ข
arr : " + JSON.stringify(arr) + "<br>";
}
</script>
<h3>6๏ธโฃ ๋ฐฐ์ด.slice() & splice()</h3>
<div id="area6" class="area"></div>
<button onclick="sliceSpliceTest()">slice/splice ํ์ธํ๊ธฐ</button>
<script>
// ============================
// 6๏ธโฃ slice() & splice() ๊ธฐ์ด ~ ์ฌํ
// ============================
function sliceSpliceTest() {
const area6 = document.querySelector("#area6");
const arr = ["Java", "Oracle", "HTML", "CSS", "JavaScript"];
area6.innerHTML = "โ
์ด๊ธฐ arr : " + JSON.stringify(arr) + "<br><br>";
// -----------------------------
// ๐ slice()
// -----------------------------
const sliced = arr.slice(1, 4); // index 1๋ถํฐ index 4 ์ง์ ๊น์ง
area6.innerHTML += "๐น arr.slice(1, 4) ๊ฒฐ๊ณผ : " + JSON.stringify(sliced) + "<br>";
area6.innerHTML += "โ ๏ธ slice ํ ์๋ณธ arr : " + JSON.stringify(arr) + "<br><br>";
// ์์ ์ธ๋ฑ์ค๋ ์ฌ์ฉ ๊ฐ๋ฅ
const slicedNegative = arr.slice(-3);
area6.innerHTML += "๐น arr.slice(-3) ๊ฒฐ๊ณผ : " + JSON.stringify(slicedNegative) + "<br>";
area6.innerHTML += "โ ๏ธ slice๋ ์๋ณธ ์ ์ง๋จ<br><br>";
// -----------------------------
// ๐ splice()
// -----------------------------
const arrCopy = [...arr]; // ์๋ณธ ๋ณด์กด ์ํด ๋ณต์ฌ
const spliced = arrCopy.splice(2, 2, "Spring", "MyBatis"); // index 2๋ถํฐ 2๊ฐ ์ญ์ ํ ์ ์์ ์ถ๊ฐ
area6.innerHTML += "๐ธ arr.splice(2, 2, 'Spring', 'MyBatis') ๊ฒฐ๊ณผ : " + JSON.stringify(spliced) + "<br>";
area6.innerHTML += "โ
splice ํ ๋ณ๊ฒฝ๋ arr : " + JSON.stringify(arrCopy) + "<br><br>";
// ์์ ์ญ์ ๋ง
const arrCopy2 = [...arr];
const removed = arrCopy2.splice(1, 3);
area6.innerHTML += "๐ธ arr.splice(1, 3) ์ญ์ ๋ ์์ : " + JSON.stringify(removed) + "<br>";
area6.innerHTML += "โ
์ญ์ ํ arr : " + JSON.stringify(arrCopy2) + "<br><br>";
// ์์ ์ฝ์
๋ง
const arrCopy3 = [...arr];
arrCopy3.splice(2, 0, "Python", "Django");
area6.innerHTML += "๐ธ arr.splice(2, 0, 'Python', 'Django') ์ฝ์
ํ arr : " + JSON.stringify(arrCopy3) + "<br>";
area6.innerHTML += "โ ๏ธ splice๋ ์๋ณธ ๋ฐฐ์ด ์์ฒด๋ฅผ ๋ณ๊ฒฝํจ<br>";
}
</script>
</body>
</html>