ì§ìì´ ì¤ë¨ëììµëë¤: ì´ ê¸°ë¥ì ë ì´ì ê¶ì¥ëì§ ììµëë¤. ì¼ë¶ ë¸ë¼ì°ì ììë ìì§ ì§ìí ì ìì§ë§ ê´ë ¨ ì¹ íì¤ìì ì´ë¯¸ ì ê±°ëìê±°ë ì ê±° ê³¼ì ì ìë ê²½ì°ê° ìì¼ë©°, í¸íì±ì ìí´ ì ì§ëê³ ìì ì ììµëë¤. ì¬ì©ì í¼íê³ ê°ë¥íë¤ë©´ 기존 ì½ë를 ì ë°ì´í¸íì¸ì. ê²°ì ì ì§ìí íë¨ì í¸íì± í를 íì¸íì¸ì. ì´ ê¸°ë¥ì ì¸ì ë ì§ ìëì ì¤ë¨í ì ììì ì ìíì¸ì.
ì°¸ê³ :
with
문ì ì¬ì©ì ê¶ì¥ëì§ ììµëë¤. í¼ëì¤ë¬ì´ ë²ê·¸ì í¸íì± ë¬¸ì ì ìì¸ì´ ë ì ìê³ ìµì í를 ë¶ê°ë¥íê² ë§ë¤ë©° ì격 모ëìì ê¸ì§ëì´ ì기 ë문ì ëë¤. ìì±ì ì ê·¼íê³ ì íë ê°ì²´ë¥¼ ìì ë³ìì í ë¹íë ê²ì´ ëìì¼ë¡ ê¶ì¥ë©ëë¤.
with
문ì 문ì ì¤ì½í ì²´ì¸ì íì¥í©ëë¤.
with (expression)
statement
expression
문ì íê°í ë ì¬ì©ëë ì¤ì½í ì²´ì¸ì 주ì´ì§ ííìì ì¶ê°í©ëë¤. ííì 주ìì ê´í¸ë íìì ëë¤.
statement
ììì 문. ì¬ë¬ ê°ì 문ì ì¤ííë ¤ë©´ ë¸ë¡ 문({ ... }
)ì ì¬ì©íì¬ ë¬¸ë¤ì 묶ìµëë¤.
ìë³ììë ë ê°ì§ ì íì´ ììµëë¤. 'ì íë' ìë³ìì 'ì íëì§ ìì' ìë³ìì ëë¤. ì íëì§ ìì ìë³ìë í´ë¹ ìë³ìê° ì´ëì ìëì§ ëíë´ì§ ìë ìë³ìì ëë¤.
foo; // ì íëì§ ìì ìë³ì
foo.bar; // barë ì íë ìë³ì
ì¼ë°ì ì¼ë¡ ì íëì§ ìì ìë³ìë ê·¸ ì´ë¦ì ê°ì§ ë³ì를 찾기 ìí´ ì¤ì½í ì²´ì¸ì ê²ìí¨ì¼ë¡ì¨ ì´íë©ëë¤. ë°ë©´ì ì íë ìë³ìë ê·¸ ì´ë¦ì ê°ì§ ìì±ì 찾기 ìí´ ê°ì²´ì íë¡í íì ì²´ì¸ì ê²ìíì¬ ì´íë©ëë¤.
const foo = { bar: 1 };
console.log(foo.bar);
// fooë ì¤ì½í ì²´ì¸ìì ë³ìë¡ ë°ê²¬ëë¤.
// barë fooìì ìì±ì¼ë¡ ë°ê²¬ëë¤.
ì´ ê·ì¹ì ìì¸ë ì ì ê°ì²´ë¡, ì´ë ì¤ì½í ì²´ì¸ì ìµììì ìì¹íì¬ ì ì ê°ì²´ì ìì±ë¤ì ìëì ì¼ë¡ ì íì ìì´ ì°¸ì¡°í ì ìë ì ì ë³ìê° ë©ëë¤.
console.log(globalThis.Math === Math); // true
with
문ì 문ì ë³¸ë¬¸ì´ íê°ëë ëì 주ì´ì§ ê°ì²´ë¥¼ ì¤ì½í ì²´ì¸ì 맨 ìì ì¶ê°í©ëë¤. 모ë ì íëì§ ìì ì´ë¦ì ìì ì¤ì½í ì²´ì¸ì ê²ìí기 ì ì 먼ì 주ì´ì§ ê°ì²´ ë´ìì (inì¼ë¡ íì¸íì¬) ê²ìë©ëë¤.
ì°¸ê³ ë¡ ì íëì§ ìì ì°¸ì¡°ê° ê°ì²´ì ë©ìë를 ì¡°ííë ê²½ì° ê·¸ ë©ìëë with
문ì 주ì´ì§ ê°ì²´ë¥¼ this
ê°ì¼ë¡ íì¬ í¸ì¶ë©ëë¤.
with ([1, 2, 3]) {
console.log(toString()); // 1,2,3
}
ê°ì²´ë @@unscopables
ìì±ì ê°ì§ ì ìì¼ë©°, ì´ ìì±ì (íì í¸íì±ì ìí´) ì¤ì½í ì²´ì¸ì ì¶ê°ëì§ ììì¼ íë ìì±ì 목ë¡ì ì ìí©ëë¤. ìì¸í ë´ì©ì Symbol.unscopables 문ì를 ì°¸ê³ íììì¤.
with
문ì ì¬ì©íë ì´ì ë ìì ë³ì를 íë ì¤ì´ë ê²ê³¼ 긴 ê°ì²´ 참조를 ë°ë³µíë 걸 í¼í¨ì¼ë¡ì¨ íì¼ í¬ê¸°ë¥¼ ì¤ì´ë ê²ì
ëë¤. ê·¸ë¬ë with
ë¬¸ì´ ë°ëì§íì§ ìì ì´ì ë¤ì í¨ì¬ ë ë§ê³ ë¤ìê³¼ ê°ìµëë¤.
ì±ë¥: with
문ì 모ë ì´ë¦ ì¡°íìì ì§ì ë ê°ì²´ë¥¼ 첫ë²ì§¸ë¡ ê²ìíê² í©ëë¤. ë°ë¼ì ì§ì ë ê°ì²´ì ìì±ì´ ìë 모ë ìë³ìë with
ë¸ë¡ ë´ìì ë ëë¦¬ê² ê²ìë©ëë¤. ê²ë¤ê° ìµì í ëêµ¬ê° ì íëì§ ìì ìë³ì ê°ê°ì´ 무ìì 참조íëì§ì ëí´ ì´ë¤ ê°ì ë í ì ìì¼ë¯ë¡, ìë³ìê° ì¬ì©ë ëë§ë¤ ëì¼í ìì± ì¡°í를 ë°ë³µí´ì¼ í©ëë¤.
ê°ë
ì±: with
문ì ì¸ê° ë
ìë JavaScript ì»´íì¼ë¬ê° ì íëì§ ìì ì´ë¦ì´ ì¤ì½í ì²´ì¸ìì ë°ê²¬ë ì§, ë§ì½ ê·¸ë ë¤ë©´ ì´ë¤ ê°ì²´ìì ë°ê²¬ë ì§ë¥¼ íë¨í기 ì´ë µê² ë§ëëë¤. ë¤ìì ê·¸ ììì
ëë¤.
function f(x, o) {
with (o) {
console.log(x);
}
}
f
ì ì ìë§ ë³´ë©´ with
본문 ë´ì x
ê° ë¬´ìì 참조íëì§ ì ì ììµëë¤. x
ê° o.x
ì¸ì§ f
ì 첫 ë²ì§¸ íì 매ê°ë³ìì¸ì§ë f
ê° í¸ì¶ë ëë§ ì ì ììµëë¤. ë ë²ì§¸ 매ê°ë³ìë¡ ì ë¬íë ê°ì²´ì x
를 ì ìíë ê²ì ìì´ë ì¤ë¥ê° ë°ìíì§ ììµëë¤. ëì ììì¹ ëª»í ê²°ê³¼ê° ëì¬ ë¿ì
ëë¤. ëí ì´ë¬í ì½ëë ì¤ì ìëê° ë¬´ìì¸ì§ë ë¶ë¶ëª
í©ëë¤.
í¥í í¸íì±: with
를 ì¬ì©íë ì½ëë í¹í ë¨ìí ê°ì²´ê° ìë ëìê³¼ í¨ê» ì¬ì©ë ë í¥í í¸íëì§ ìë ì½ëê° ë ì ììµëë¤. ì´ë í´ë¹ ëìì´ ë¯¸ëì ë ë§ì ìì±ì ê°ê² ë ì ì기 ë문ì
ëë¤. ë¤ì ìì를 ì´í´ë³´ê² ìµëë¤.
function f(foo, values) {
with (foo) {
console.log(values);
}
}
ECMAScript 5 íê²½ìì f([1, 2, 3], obj)
를 í¸ì¶íë©´, with
문 ë´ì values
참조ë obj
ë¡ ì´íë©ëë¤. ê·¸ë¬ë ECMAScript 2015ë Array.prototype
ì values
ìì±ì ëì
í©ëë¤(ë°ë¼ì 모ë ë°°ì´ìì values
ìì±ì ì¬ì©í ì ìê² ë©ëë¤). ë°ë¼ì íê²½ì ì
ê·¸ë ì´ëíë©´ with
문 ë´ì values
참조ë [1, 2, 3].values
ë¡ ì´íëë©°, ì´ë ë²ê·¸ë¥¼ ì¼ì¼í¬ ê°ë¥ì±ì´ í½ëë¤.
ì´ í¹ì ìì ììë values
ê° Array.prototype[@@unscopables]
ì ìí´ ì¤ì½í ì§ì ë¶ê°ë¥íê² ì ìëì´ ìì´ í´ë¹ ì½ëì values
ë ì¬ì í values
매ê°ë³ìë¡ ì¬ë°ë¥´ê² ì´íë©ëë¤. ë§ì½ values
ê° ì¤ì½í ì§ì ë¶ê°ë¥ì¼ë¡ ì ìëì§ ììë¤ë©´, ì´ë ëë²ê¹
í기 ì´ë ¤ì´ 문ì ê° ë ì ììµëë¤.
ë¤ì with
문ì Math
ê°ì²´ë¥¼ 기본 ê°ì²´ë¡ ì§ì í©ëë¤. with
문 ë¤ìì 문ì¥ë¤ì ê°ì²´ë¥¼ ëª
ìíì§ ìê³ PI
ìì±ê³¼ cos
ë° sin
ë©ìë를 참조í©ëë¤. JavaScriptë ì´ë¬í 참조ì ëí´ Math ê°ì²´ë¥¼ ê°ì í©ëë¤.
let a, x, y;
const r = 10;
with (Math) {
a = PI * r * r;
x = r * cos(PI);
y = r * sin(PI / 2);
}
íì¬ ì¤ì½íìì ìì± êµ¬ì¡° ë¶í´ í ë¹ì ì¬ì©íì¬ with문 í¼í기
ëë¶ë¶ì ê²½ì° ìì± êµ¬ì¡° ë¶í´ í ë¹ì íµí´ì with
ì¬ì©ì í¼í ì ììµëë¤. ì¬ê¸°ìë with
ê° ì¶ê° ì¤ì½í를 ìì±íë ëìì 모방í기 ìí´ ì¶ê° ë¸ë¡ì ë§ë¤ìì§ë§ ì¤ì ì¬ì©ììë ì´ ë¸ë¡ì ë³´íµ ìëµí ì ììµëë¤.
let a, x, y;
const r = 10;
{
const { PI, cos, sin } = Math;
a = PI * r * r;
x = r * cos(PI);
y = r * sin(PI / 2);
}
IIFE를 ì¬ì©íì¬ with문 í¼í기
ë§ì½ 긴 ì´ë¦ì 참조를 ì¬ë¬ ë² ì¬ì¬ì©í´ì¼ íë ííìì ë§ë¤ê³ ìì¼ë©° ê·¸ 긴 ì´ë¦ì ííì ë´ìì ì ê±°íë ¤ê³ íë¤ë©´ IIFEë¡ ííìì ê°ì¸ê³ 긴 ì´ë¦ì ì¸ìë¡ ì ê³µí ì ììµëë¤.
const objectHavingAnEspeciallyLengthyName = { foo: true, bar: false };
if (((o) => o.foo && !o.bar)(objectHavingAnEspeciallyLengthyName)) {
// ì´ ë¶ê¸°ê° ì¤íë©ëë¤.
}
with문과 íë¡ì를 ì¬ì©í´ì ëì ë¤ìì¤íì´ì¤ ìì±í기
with
ë 모ë ë³ì ì¡°í를 ìì± ì¡°íë¡ ë³ííë ë°ë©´ íë¡ìë 모ë ìì± ì¡°í í¸ì¶ì ê°ë¡ì± ì ìê² í©ëë¤. ì´ë¥¼ ê²°í©íì¬ ëì ë¤ìì¤íì´ì¤ë¥¼ ìì±í ì ììµëë¤.
const namespace = new Proxy(
{},
{
has(target, key) {
// `console`ê³¼ ê°ì ì ì ìì±ì ê°ë¡ì±ë 걸 í¼íììì¤.
if (key in globalThis) {
return false;
}
// 모ë ìì± ì¡°í를 ê°ë¡ì±ëë¤.
return true;
},
get(target, key) {
return key;
},
},
);
with (namespace) {
console.log(a, b, c); // "a" "b" "c"
}
ëª
ì¸ì ë¸ë¼ì°ì í¸íì± ê°ì´ 보기
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4