July 13, 2020
๐ ์ด์ ์คํ์ปจํ
์คํธ๋ฅผ ๊ณต๋ถํ๋ฉด์, Scope
๋ผ๋ ์ฉ์ด๋ฅผ ์ ํ๊ฒ ๋์๋ค. ๊ทธ๋ ๊ฒ ์ด๋ ค์ด ์ฉ์ด๋ ์๋์์ง๋ง, ์ง๊ธ์๊ฐํด๋ณด๋Scope
๋ฅผ ๋จผ์ ์๊ณ ์คํ์ปจํ
์คํธ๋ฅผ ๊ณต๋ถํ๋ค๋ฉด ๋ ์์ํ์ ๋ฏ ํ๋ค.
Scope
๋ ํจ์๊ฐ ํธ์ถ๋ ๋๊ฐ ์๋๋ผ, ์ ์ธํ์ ๋ ์ ํด์ง๋ค๊ณ ํ์์.
// 1๋ฒ
var name = 'zero'
function wrapper() {
var name = 'nero'
function log() {
console.log(name)
}
log()
}
wrapper() // nero
// 2๋ฒ
var name = 'zero'
function log() {
console.log(name)
}
function wrapper() {
var name = 'nero'
log()
}
wrapper() // zero
1๋ฒ์์ function log
์ธ ํจ์์ ์ธ์์, wrapper
ํจ์ ์์์๊ธฐ ๋๋ฌธ์, wrapper
์ ๋ด๋ถ๊น์ง๊ฐ Scope
์์ญ์. ๋ฐ๋ผ์, var name="nero"
๋ผ๋ ๋ณ์๊ฐ ๋ด๊ธดํด๋ก์ ์ ์ ๊ทผํ ์์์.
2๋ฒ์์ function log
์ธ ํจ์์ ์ธ์์, ์ ์ญ์ ์์นํ๊ณ ์๊ธฐ ๋๋ฌธ์, ์ฐธ์กฐํ ์ ์๋ ๊ฒ์ด ์ ์ญ๋ณ์์ธ var name="zero"
๋ฟ์ด์ฌ์ ๊ฐ์ด ๋ค๋ฅด๋ค.
์ ์ญ๋ณ์๋ window
๊ฐ์ฒด์ ์ถ๊ฐ๋๊ธฐ๋๋ฌธ์, ์ฑ์ ๊ท๋ชจ๊ฐ ์ปค์ง์๋ก ์ฌ์ฉํ๋ฉด ์๋๋ค.
var ๋ window
๊ฐ์ฒด์ ํฌํจ๋์ง๋ง, let
, const๋
๋ณ๋์ ๊ฐ์ฒด์ ์ถ๊ฐ๋จ. ๋ฐ๋ผ์, const
let์
๊ด์ฐฎ์๊ฒ ๊ฐ๋๋ผ.
var param = {
text: 'local',
alertText: function() {
console.log(this.text)
},
}
ํ์ง๋ง, ์์ ๊ฒฝ์ฐ, ์ถ๊ฐ์ ์ผ๋ก script
๋ฅผ ์ถ๊ฐํ์ฌ, x์ y๋ฅผ ๊ณ ์์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋ค. obj.text = 'fuck'
์ด๋ฐ์์ผ๋ก
๋น๊ณต๊ฐ๋ณ์๋ก ๋ง๋ค์ด์ ํด๊ฒฐํ ์ ์๋ค.
const param = (() => {
// 1. param์ด๋ผ๋ ๋ณ์์, ๋น๊ณต๊ฐ๋ณ์๋ฅผ Closure๋ก ๊ฐ๋ ๋ฉ์๋๋ฅผ ํฌํจํ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
let text = 'local'
return {
alertText: function() {
console.log(text)
},
}
})()
param.alertText() // 2. ํ์ํ ๋ ์ฌ์ฉํ๋ค.
์คํ์ปจํ
์คํธ์ ์ด๋ฒ ์ค์ฝํ๋ฅผ ํ๋ฉด์ ์ปจํ
์คํธ์์ ์์ฑ๋๋ [[Scopes]]
๊ฐ์ฒด์์ closure
๋ผ๋ ๊ฐ์ ๋ณด์๊ณ , ์ด๋ฒ์๋ ์ค์ฝํ ์์ญ ๋ด์ ๋ณ์๋ฅผ closure
๋ผ๊ณ ํ๋๊ฑธ ๋ณด์๋ค. ๋ค์๋ฒ์๋ closure
๊ฐ ์ ํํ ๋ฌด์์ธ์ง ์์๋ณด์์ผ ๊ฒ ๋ค.