๋ชฉ์ฐจ
JS์ Arrow function์ ๋ํด์ ์์๋ณด์.
1. Arrow Function ์ด๋?
ํ์ดํ ํจ์๋ ์๋์ ๊ฐ์ด ์ฌ์ฉํ๋ค.
let a = ()=> {
...
}
a();
๊ธฐ์กด์ function( ){ ... } ๊ณผ ๋ค๋ฅด๊ฒ
=>(ํ์ดํ)๋ฅผ ์ด์ฉํ์ฌ ํจ์๋ฅผ ๋ง๋ ๋ค.
2. Arrow Function์ ์ฅ์
ํ์ดํ ํจ์๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ฌด์์ผ๊น?
๋จผ์ ํจ์๋ฅผ ์ด๋ ํ ๊ฒฝ์ฐ์ ๋ง๋ค์ด์ ์ฌ์ฉํ๋์ง ์ดํด๋ณด๋ฉด
1. ์ฝ๋๋ค์ ๊ธฐ๋ฅ์ผ๋ก ๋ฌถ๊ณ ์ถ์ ๋ / 2. ์ ์ถ๋ ฅ ๊ธฐ๋ฅ์ ๋ง๋ค ๋
์ฌ์ฉํ๋ค.
1) ์ ์ถ๋ ฅ ๊ธฐ๋ฅ์ ์ ํํํ๋ ๋ฌธ๋ฒ์ด๋ค.
arrow function์ ํจ์์ ๊ธฐ๋ฅ ์ค ์ ์ถ๋ ฅ ๊ธฐ๋ฅ์ ์ ํํํด์ฃผ๋ ์ฅ์ ์ด ์๋ค.
let func = (x, y) => { return x + y } // x, y๋ฅผ ๋ฃ์ผ๋ฉด ๋ ๊ฐ์ ๋ํด์ค๋ค!
2) ํ๋ผ๋ฏธํฐ๊ฐ ํ๋์ผ ๊ฒฝ์ฐ ์๊ดํธ ์๋ต ๊ฐ๋ฅ
ํ๋ผ๋ฏธํฐ๊ฐ ํ๋๋ง ์กด์ฌํ ๊ฒฝ์ฐ์๋ ์๊ดํธ๋ฅผ ์๋ตํ๊ณ ์ฌ์ฉํ ์ ์๋ค.
let func2 = i => {return i + 10}
3) ์ฝ๋๊ฐ ํ ์ค๋ก ๋๋ ๊ฒฝ์ฐ ์ค๊ดํธ ์๋ต ๊ฐ๋ฅ
ํจ์์ ๋ณธ๋ฌธ์ด ํ ์ค๋ก ๋๋๋ ๊ฒฝ์ฐ์๋ ์ค๊ดํธ๋ฅผ ์๋ตํ ์ ์๋ค.
let func2 = i => return i + 10;
์ด๋ return ํ๋๋ง ์กด์ฌํ ๊ฒฝ์ฐ์๋ return๋ ์๋ต์ด ๊ฐ๋ฅํ๋ค.
let func2 = i => i + 10;
func2(1); //11
func2(10); //20
์์
let arr = [1,2,3];
arr.forEach( a => console.log(a) );
========
1
2
3
4) ์ธ๋ถ์ this ๊ฐ์ ๊ทธ๋๋ก ์ฌ์ฉ๊ฐ๋ฅ
Arrow Function์ ์ฃผ์ ํน์ง์
ํจ์ ๋ด์์ this๋ ์ธ๋ถ์ this๋ฅผ ๊ทธ๋๋ก ๊ฐ์ ธ์ค๋ ๊ฒ์ด๋ค.
//case 1. ์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ function(){}
document.getElementsByClassName("box")[0].addEventListener("click",
function(e){
console.log(this)
}
)
//case 2. ์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ Arrow Func
document.getElementsByClassName("box")[1].addEventListener("click",
e => console.log(this)
)
//case 3. ์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ ์ฝ๋ฐฑํจ์๋ก ArrowFunc
document.getElementsByClassName("box")[2].addEventListener("click", function(e){
let arr = [1];
arr.forEach( a => console.log(this) );
})
case1๊ณผ 2๋ฅผ ๋น๊ตํด๋ณด์์๋
1์ ๊ฒฝ์ฐ์๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๋ด์์ this์ด๋ฏ๋ก e.currentTarget์ ๋ฐํํ์๋ค.
๋ฐ๋ฉด 2๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ธ๋ถ์ window๋ฅผ ๋ฐํํ๋ ๊ฒ์ ์ ์ ์๋ค.
case3์ฒ๋ผ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๋ด์์ ์ฝ๋ฐฑํจ์๋ฅผ
์ผ๋ฐ์ ์ธ function( ){ ... } ๋ก ํ ๊ฒฝ์ฐ, ์ผ๋ฐ ํจ์์ด๋ฏ๋ก window๋ฅผ ๋ฐํํ์ง๋ง
Arrow Function์ ์ฝ๋ฐฑ ํจ์ ์ธ๋ถ์ธ ์ด๋ฒคํธ ๋ฆฌ์ค๋์์์ this ์ฆ, e.currentTarget์ ๋ฐํํ๋ค.
'๐ | WEB DEV > Vanilla JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JS_๊ธฐ๋ณธ ๋ฌธ๋ฒ (29)_ Tagged Literals (0) | 2023.08.05 |
---|---|
JS_๋ฌธ๋ฒ (๊ฐ์ธ)_ ๋ณ์ ์ด์ ๋ฆฌ (0) | 2023.08.04 |
JS_๊ธฐ๋ณธ ๋ฌธ๋ฒ (27)_ this ํค์๋ (0) | 2023.08.01 |
JS_๊ธฐ๋ณธ ๋ฌธ๋ฒ (26)_ ์ ๊ทผ์ ํ๋กํผํฐ์ privateํ๋ (0) | 2023.04.10 |
JS_๊ธฐ๋ณธ ๋ฌธ๋ฒ (25)_ ํด๋์ค (1) | 2023.04.02 |
๋๊ธ