๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ

ํŒŒ์ƒ์ƒํ’ˆ์˜ ๋งฅ๋ฝ์— ๋Œ๋ ค๋‹ค๋‹ˆ์ง€ ๋ง๊ณ , ํ•ต์‹ฌ์„ ์ฃผ๋„์ ์œผ๋กœ ํŒŒ์•…ํ•ด์•ผํ•œ๋‹ค.

 

Quiz) ๋‹ค์Œ IIFE์˜ ์‹คํ–‰๊ฒฐ๊ณผ๋Š”?

var foo = {
    bar: function () {
        return this.baz;
    },
    baz: 1,
};

(function () {
    return typeof arguments[0]();
})(foo.bar);

๊ณต๋ถ€ํ•  ๋•Œ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ณต๋ถ€ํ•œ ๊ฒƒ์„ ์ฐธ๊ณ ํ•˜๋ฉด ํฐ ๋„์›€์ด ๋œ๋‹ค.

์‹œํ–‰์ฐฉ์˜ค๊ฐ€ ์ค„์–ด๋“ค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํ•˜์ง€๋งŒ "์ •ํ™•ํ•˜์ง€ ์•Š๋‹ค"๋Š” ์น˜๋ช…์ ์ธ ๋‹จ์ ์ด๋‹ค.

 

์œ„์˜ ์˜ˆ์‹œ๋งŒ ๋ด๋„ ํ‹€๋ฆฐ ์„ค๋ช… ๋•Œ๋ฌธ์— ํ•จ์ฐธ์„ ๋“ค์—ฌ๋‹ค๋ดค๋‹ค.

 

1. '์ต๋ช…ํ•จ์ˆ˜๋‚ด์—์„œ ์‹คํ–‰๋œ foo.bar()'

์ต๋ช…ํ•จ์ˆ˜๋‚ด์—์„œ๋Š” foo.bar()๊ฐ€ ์‹คํ–‰๋œ ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. foo.bar()๋Š” ์—„์—ฐํžˆ ๋ฉ”์„œ๋“œ์ด๋‹ค.

์ต๋ช…ํ•จ์ˆ˜๋‚ด์—์„œ๋Š” function () { return this.baz; }๊ฐ€ ์‹คํ–‰๋œ ๊ฒƒ์ด๋‹ค.

 

2. '์ž˜ ์•ˆ์“ฐ๋˜ ์ต๋ช…ํ•จ์ˆ˜์ธ๋ฐ'

์ต๋ช…ํ•จ์ˆ˜์—์„œ๋งŒ ๋ฐœ์ƒํ•˜๋Š” ์ด์Šˆ๊ฐ€ ์•„๋‹ˆ๋‹ค.

์œ„ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด๋ด๋„ undefiend๊ฐ€ ๋‚˜์˜จ๋‹ค.

var foo = {
    bar: function () {
        return this.baz;
    },
    baz: 1,
};

function execFoo() {
    return console.log(typeof arguments[0]());
}
execFoo(foo.bar);

๋ฌธ์ œ์˜ ํ•ต์‹ฌ์€ foo ์˜ค๋ธŒ์ ํŠธ์•ˆ์— ์ •์˜๋œ ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š๊ณ , ๋‹ค๋ฅธ ์ปจํ…์ŠคํŠธ์•ˆ์—์„œ "ํ•จ์ˆ˜"๋กœ์จ ์ „๋‹ฌ๋˜์–ด ์‹คํ–‰๋˜๋ฉด this๋Š” ํ˜ธ์ถœ๋œ ์ปจํ…์ŠคํŠธ๋ฅผ ๋ฐ”๋ผ๋ณธ๋‹ค๋Š” ์ ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

 

๊ฐœ์ •ํŒ) ํ•ต์‹ฌ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋Š” "์ข‹์€" ์˜ˆ์ œ

var foo = {
    bar: function () {
        return this.baz;
    },
    baz: 1,
};

function execFoo(func) {
    return func()
}

console.log(execFoo(foo.bar))    // ? 
cosole.log(foo.bar())            // ?
๋ฐ˜์‘ํ˜•