with
with ๋ฌธ์ scope chain์ ํ์ฅํ๋ค.
syntax
with(expression) statement
expression : statement๋ฅผ ํ๊ฐํ ๋ ์ฌ์ฉ๋ scope chain์ ์ฃผ์ด์ง ํํ์์ ์ถ๊ฐํ๋ค. ํํ์ ์ฃผ๋ณ์ {}๋ ํ์๋ค.
statement : Any statement. ์ฌ๋ฌ๊ฐ์ statement๋ฅผ ์คํํ๊ธฐ ์ํด, ์ฌ๋ฌ๊ฐ์ statements๋ฅผ ๊ทธ๋ฃจํ ํ๊ธฐ ์ํด block statement๋ฅผ ์ฌ์ฉํด๋ผ.
description
JS๋ ์คํ ์ปจํ ์คํธ์์ ์ฐ๊ด๋ scope chain์ ๊ฒ์ํ์ฌ ๊ฐ์ ์ฐพ์ ์ ์๋ ๋ณ์ or ํจ์๋ฅผ ์ฐพ๋๋ค.
with statement๋ statement ๋ณธ๋ฌธ์ ํ๊ฐํ๋ ๋์ ํด๋น scope chain์ head(๊ฐ์ฅ ์์?)์ ์ฃผ์ด์ง object๋ฅผ ์ถ๊ฐํ๋ค.
๋ง์ฝ ๊ฐ์ ์ฐพ์ ์ ์๋ ์ด๋ฆ์ด scope chain์ ํ๋กํผํฐ์ ๋งค์น๋๋ค๋ฉด, ๊ทธ ์ด๋ฆ์ ๊ทธ ํ๋กํผํฐ์ ํ๋กํผํฐ๋ฅผ ํฌํจํ ์ค๋ธ์ ํธ์ ๋ฐ์ด๋ฉ๋๋ค.
๋ง์ฝ scope chain์ ๋งค์น๋๋ ํ๋กํผํฐ๊ฐ ์๋ค๋ฉด, ReferenceError๊ฐ ๋ฐ์ํ๋ค.
with ์ฌ์ฉํ๊ธฐ๋ ์ถ์ฒ๋์ง ์๋๋ค. ES5 strict mode์์ ์ฌ์ฉ ๊ธ์ง ๋์๋ค. ์ถ์ฒํ๋ ๋์์ ๋๊ฐ ์์ ๋ณ์๋ก ์ ๊ทผํ๊ธฐ๋ฅผ ์ํ๋ ํ๋กํผํฐ๋ฅผ ๊ฐ์ง ์ค๋ธ์ ํธ๋ฅผ ํ ๋นํ๋ ๊ฒ์ด๋ค.
performance pro & contra
Pro
with statement๋ ์ฑ๋ฅ ํ๋ํฐ ์์ด ๋งค์ฐ ๊ธด ์ค๋ธ์ ํธ ๋ ํผ๋ฐ์ค๋ฅผ ๋ฐ๋ณตํ ํ์๋ฅผ ๊ฐ์์์ผ์ file size๋ฅผ ๊ฐ์์๋๋ฐ ๋์์ ์ค๋ค. with์ ํ์ํ scope chain ๋ณ๊ฒฝ์ ๊ณ์ฐ์ ์ผ๋ก ๋น์ฉ์ด ๋ค์ง ์๋๋ค. with์ ์ฌ์ฉ์ ์ธํฐํ๋ฆฌํฐ๊ฐ ๋ฐ๋ณต๋ object ์ฐธ์กฐ๋ฅผ ํ์ฑ ํ๋ ํ์๋ฅผ ๊ฐ์์ํจ๋ค..? ๊ทธ๋ฌ๋, ๋๋ถ๋ถ์ ๊ฒฝ์ฐ์, ์ํ๋ ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ ์ฅํ๋ ์์ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ์ด์ ์ด ์ฑ์ทจ๋๋ค.
Contra
with statement๋ ๋ช
์๋ ์ค๋ธ์ ํธ๊ฐ ๋ชจ๋ ์ด๋ฆ ๊ฒ์์์ ์ฒซ๋ฒ์งธ๋ก ๊ฒ์๋๋๋ก ํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ช
์๋ ์ค๋ธ์ ํธ์ ๋ฉค๋ฒ๊ฐ ์๋ ๋ชจ๋ ์๋ณ์๋ with block์์ ๋ ์ฒ์ฒํ ๋ฐ๊ฒฌ๋๋ค. ์ฑ๋ฅ์ด ์ค์ํ ๊ณณ์์ with๋ ์ง์ ๋ ๊ฐ์ฒด์ ๋ฉค๋ฒ์ ์ ๊ทผํ๋ ์ฝ๋ ๋ธ๋ก์ ํฌํจํ๋ ๋ฐ๋ง ์ฌ์ฉํด์ผ ํ๋ค. (์์ scope์์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ ์ถ๊ฐ ์ฒ๋ฆฌ ์๊ฐ ์์๋๋ค,)
Ambiguity contra
Contra: with ๋ฌธ์ ์ฌ๋์ด ์ฝ๊ธฐ์๋, js compiler๊ฐ unqualified ์ด๋ฆ์ scope chain์์ ์ฐพ์์ง ๋ง์ฝ ๊ทธ๋ ๋ค๋ฉด ์ด๋ค ๊ฐ์ฒด์ธ์ง ๊ฒฐ์ ํ๊ธฐ์๋ ์ด๋ ต๋ค. ๋ค์ ์์ ๋ฅผ ๋ณด์.
f๊ฐ ํธ์ถ ๋์ ๋, x๋ ์ฐพ์์ง ์๋ ์๊ณ ์๋ ์๋ ์๋ค.
๋ง์ฝ ์ฐพ์์ง๋ค๋ฉด o ์์์ ํน์ (๊ทธ๋ฌํ property๋ ์กด์ฌํ์ง ์๋๋ค๋ฉด) x๊ฐ ์ฒซ๋ฒ์งธ ํ์ ๋งค๊ฐ๋ณ์์ธ ๊ณณ f์ AO(activation object)์์ ์๋ค.
๋ง์ฝ 2๋ฒ์งธ ๊ฐ์ฒด๋ก ํต๊ณผ ์ํจ ๊ฐ์ฒด ๋ด์์ x๋ฅผ ์ ์ํ๋ ๊ฒ์ ์๋๋ค๋ฉด
ํน์ ๋ง์ฝ ๋น์ทํ ๋ฒ๊ทธ๊ฐ ์์ผ๋ฉด ์๋ฌ๋ฅผ ๊ฑฑ์ ํ์ง ๋ง๋ผ. ๋จ์ง ์์์น ๋ชปํ ๊ฒฐ๊ณผ๊ฐ ์๋ค.
Contra: with๋ฅผ ์ฌ์ฉํ ์ฝ๋๋ ํนํ plain object๊ฐ ์๋ ๊ฒ์ผ๋ก ์ฌ์ฉ๋ ๋, ํ์ ํธํ๋์ง ์์ ์ ์๋ค. ๋ค์ ์์ ๋ฅผ ๋ณด์.
๋ง์ฝ ECMAScript 5์์ f([1,2,3], obj)๋ฅผ ํธ์ถํ๋ค๋ฉด,
with๋ฌธ ๋ด์ values๊ฐ ์ฐธ์กฐ๊ฐ obj๋ก ํด์๋๋ค.
๊ทธ๋ฌ๋, ECMAScript 6์ values property๋ฅผ Array.prototype์ผ๋ก ์๊ฐํ๋ค. (๊ทธ๋์ ๋ชจ๋ array ์์ ์ด์ฉํ ์ ์๋ค.)
๊ทธ๋์ ES6์ ์ง์ํ๋ JS ํ๊ฒฝ ์์์๋, with๋ฌธ ๋ด์ values ์ฐธ์กฐ ๊ฐ์ [1,2,3].values๋ก ํด์๋๋ค.
Example
๋ค์ with๋ฌธ์ Math object๊ฐ default object์ธ ๊ฒ์ ๋ช
์ํ๋ค.
with๋ฌธ ๋ค์์ ๋ช
๋ น๋ฌธ์ PI property์ cos, sin method๋ฅผ ๊ฐ์ฒด ๋ช
์ ์์ด ์ฐธ์กฐํ ์ ์๋ค.
with๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ.
JS์ ๋น๋๊ธฐ์ ์ธ ์ฝ๋ฐฑ ํจ์์ ํน์ฑ๊ณผ, scope์ ์ง์์ฑ์ด ํฉ์ณ์ง ๊ฒฐ๊ณผ.
์ฐจ์ด๋ฅผ ์๊ณ ์ถ๋ค๋ฉด
with์ค์ ์ ๊ฑฐํ๊ณ ,num์i๋ก ๋ณ๊ฒฝํ๋ฉด ๋๋ค.
summary
์ ์
with๋ฌธ์ scope chain์ ํ์ฅํ๋ค.
with๋ฌธ์ ๊ดํธ์์ ๊ฐ์ฒด๋ฅผ ํด๋น scope chain์ ์ถ๊ฐํ๋ค.
์ฅ์
์ฑ๋ฅ ํ๋ํฐ ์์ด ๊ธด object reference ๋ฐ๋ณต์ ๊ฐ์ํ ์ ์๋ค. ์ด๋ก ์ธํด file size๋ ๊ฐ์ํ๋ค.
ํ์ง๋ง ์ด๊ฒ์ ์ํ๋ ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ ์ฅํ๋ ์์๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด ํด๊ฒฐ๋๋ค.
๋จ์
๋ช ์๋ object๋ all name lookup์์ ๋จผ์ ๊ฒ์๋๋ค. ๋ฐ๋๋ก ๋ช ์๋ object์ ๋ฉค๋ฒ๊ฐ ์๋ ๋ชจ๋ ์๋ณ์๋
with๋ฌธ์์ ๋ ์ฒ์ฒํ ๋ฐ๊ฒฌ๋๋ค.ํผํฌ๋จผ์ค๊ฐ ์ค์ํ ๊ณณ์์,
with์ ๋ฌด์กฐ๊ฑด ๋ช ์๋ object์ ๋ฉค๋ฒ๋ฅผ ์ ๊ทผํ๋ ์ฝ๋ ๋ธ๋ก ๋ด์์๋ง ์ฌ์ฉ๋์ด์ผ ํ๋ค.
๋ชจํธ์ฑ ๋ฌธ์
์ฌ๊ธฐ์ value๋ obj์ property ํน์ function formatting argument์ผ ์ ์๋ค. ์ด๋ฌํ ์ํฉ์ ๋ฐฉ์งํ๊ธฐ์ํด with๋ฌธ ์ฌ์ฉ์ ์์ ํด์ผ ํ๋ค.
๋์ ์์๋ณ์์ ์ ์ฅํ๋ ๊ฒ์ ํ์ฉํ์.
์ฐธ๊ณ
Last updated
Was this helpful?