๐ŸŸจ JavaScript/๊ฐœ๋…

[mdn] ๊ธฐ๋ณธ๊ฐ’ ๋งค๊ฐœ๋ณ€์ˆ˜

Zoeeey 2022. 4. 15. 17:07

๊ฐœ์š”

๊ณผ๊ฑฐ์— ๊ธฐ๋ณธ๊ฐ’ ์„ค์ •์€ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์„ ๊ฒ€์‚ฌํ•ด undefined์ธ ๊ฒฝ์šฐ ๊ฐ’์„ ํ• ๋‹นํ•˜๋Š” ๋ฐฉ์‹์ด์—ˆ๋‹ค.

function multiply(a, b) {
    b = (typeof b !== 'undefined') ? b : 1
    return a*b
}

์ด์ œ๋Š” ๊ธฐ๋ณธ๊ฐ’ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ๊ฐ„๋‹จํžˆ default๊ฐ’์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค.

function multiply(a, b = 1) {
    return a*b
}

์‘์šฉ 1

๊ธฐ๋ณธ๊ฐ’์€ ํ˜ธ์ถœ ์‹œ์— ํ‰๊ฐ€๋˜์–ด, ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

function goodCoder(coding = coder()) {
    return coding
}

let numberOfTimesCalled = 0
function coder(){
    numberOfTimesCalled += 1
    return numberOfTimesCalled
}

goodCoder() // 1
goodCoder() // 2

 

์‘์šฉ 2

์•ž์ชฝ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋’ท์ชฝ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ธฐ๋ณธ๊ฐ’์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

function coder(name, greeting, message = greeting + ' ' + name) {
    return [name, greeting, message]
}

console.log(coder('Noran', 'Hi')); // ["Noran", "Hi", "Hi Noran"]
console.log(coder('Noran', 'Hi', 'Happy Birthday!')); // ["Noran","Hi","Happy Birthday!"]

 

์œ ํšจ๋ฒ”์œ„ ํšจ๊ณผ (Scope Effects)

ํ•œ๊ฐœ ์ด์ƒ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๊ธฐ๋ณธ๊ฐ’์ด ์ง€์ •๋˜๋ฉด ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ชฉ๋ก๋‚ด์˜ ์‹๋ณ„์ž๋“ค(identifiers) ๋Œ€์ƒ์œผ๋กœ ๋‘๋ฒˆ์งธ ์Šค์ฝ”ํ”„(Environment Record)๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

๊ทธ๋ ‡๊ฒŒ ๋˜์–ด ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์„ ์–ธ๋œ ํ•จ์ˆ˜์™€ ๋ณ€์ˆ˜๋“ค์€ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ธฐ๋ณธ๊ฐ’์— ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋‹ค.

์˜ˆ์ œ 1 : ์•„๋ž˜ ์ฝ”๋“œ๋Š” ` f `๋ฅผ ํ˜ธ์ถœ ์‹œ ReferenceError๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

function f(a = go()) {
    function go() { return ':P' }
}

์˜ˆ์ œ 2 : ์•„๋ž˜ ์ฝ”๋“œ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ€๋ณธ๊ฐ’์ด ์ž์ฒด ์Šค์ฝ”ํ”„์— ์žˆ์œผ๋ฏ€๋กœ undefined๋ฅผ ํ”„๋ฆฐํŠธํ•œ๋‹ค.

function f(a, b = () => console.log(a)) {
    var a = 1
    b()
}

์ถœ์ฒ˜ : MDN https://developer.mozilla.org/ko