ÐÑедÑпÑеждение: ÐÑполÑзование опеÑаÑоÑа with
не ÑекомендÑемо, Ñ.к. он Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸ÑÑоÑником запÑÑаннÑÑ
багов и пÑоблем ÑовмеÑÑимоÑÑи. ÐеÑалÑÐ½Ð°Ñ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð² паÑагÑаÑе "Ambiguity Contra" Ñаздела "Description".
ÐнÑÑÑÑкÑÐ¸Ñ with ÑаÑÑиÑÑÐµÑ ÑепоÑÐºÑ Ð¾Ð±Ð»Ð°ÑÑей видимоÑÑи Ð´Ð»Ñ Ð¸Ð½ÑÑÑÑкÑии.
СинÑакÑиÑwith (expression) statement
expression
ÐобавлÑÐµÑ Ð´Ð°Ð½Ð½Ñй exrpession в ÑепоÑÐºÑ Ð¾Ð±Ð»Ð°ÑÑей видимоÑÑи иÑполÑзÑемое когда иÑÑледÑеÑÑÑ statement. РекомендÑеÑÑÑ Ð¸ÑполÑзоваÑÑ ÐºÑÑглÑе Ñкобки вокÑÑг вÑÑажениÑ.
statement
ÐÑбое вÑÑажение. ЧÑÐ¾Ð±Ñ Ð¸ÑполÑзоваÑÑ Ð½ÐµÑколÑко вÑÑажений, иÑполÑзÑйÑе опеÑаÑÐ¾Ñ block statement ({ ... }), ÑÑÐ¾Ð±Ñ ÑгÑÑппиÑоваÑÑ Ð¸Ñ .
JavaScript иÑÐµÑ unqualified имÑ, иÑÑледÑÑ ÑепоÑÐºÑ Ð¾Ð±Ð»Ð°ÑÑей видимоÑÑи, ÑвÑзаннÑÑ Ñ Ð²Ñполнением ÑкÑипÑа или ÑÑнкÑии, ÑодеÑжаÑиÑ
ÑÑо unqualified имÑ. ÐпеÑаÑÐ¾Ñ 'with' добавлÑÐµÑ Ð´Ð°Ð½Ð½Ñй обÑÐµÐºÑ Ð² наÑало ÑепоÑки облаÑÑей видимоÑÑи в Ñ
оде иÑÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ñела его опеÑаÑоÑа. ÐÑли unqualified Ð¸Ð¼Ñ Ð¸ÑполÑзÑемое в Ñеле ÑооÑвеÑÑÑвÑÐµÑ ÑвойÑÑÐ²Ñ Ð² ÑепоÑке облаÑÑей видимоÑÑи, Ñогда Ð¸Ð¼Ñ Ð¿ÑивÑзÑваеÑÑÑ Ðº ÑвойÑÑÐ²Ñ Ð¸ обÑекÑÑ, ÑодеÑжаÑÐµÐ¼Ñ ÑÑо ÑвойÑÑво. РпÑоÑивном ÑлÑÑае возвÑаÑаеÑÑÑ ReferenceError
.
ÐÑимеÑание: ÐÑполÑзование опеÑаÑоÑа with
не ÑекомендÑеÑÑÑ, и недопÑÑÑимо в ÑÑÑогом Ñежиме (strict mode) ECMAScript 5 . РекомендÑемой алÑÑеÑнаÑивой Ð¼Ð¾Ð¶ÐµÑ ÑÑаÑÑ ÑвÑзÑвание обÑекÑа, ÑÑи ÑвойÑÑва ÐÑ Ñ
оÑели полÑÑиÑÑ, Ñ ÐºÐ¾ÑоÑким именем пеÑеменной.
Pro: ÐпеÑаÑÐ¾Ñ with Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð¼Ð¾ÑÑ ÑменÑÑиÑÑ ÑÐ°Ð·Ð¼ÐµÑ Ñайла, ÑменÑÑив Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑÑ Ð¿Ð¾Ð²ÑоÑÑÑÑ Ð´Ð»Ð¸Ð½Ð½ÑÑ ÑÑÑÐ»ÐºÑ Ð½Ð° обÑÐµÐºÑ Ð±ÐµÐ· ÑÐ½Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¿ÑоизводиÑелÑноÑÑи. Ðзменение ÑепоÑки конÑекÑÑа, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾Ðµ Ð´Ð»Ñ 'with', не ÑÑебÑÐµÑ Ð±Ð¾Ð»ÑÑÐ¸Ñ Ð²ÑÑиÑлиÑелÑнÑÑ Ð·Ð°ÑÑаÑ. ÐÑполÑзование 'with' Ð¸Ð·Ð±Ð°Ð²Ð¸Ñ Ð¸Ð½ÑеÑпÑеÑаÑÐ¾Ñ Ð¾Ñ ÑазбоÑа повÑоÑнÑÑ ÑÑÑлок на обÑекÑÑ. Ðднако, обÑаÑиÑе внимание, ÑÑо во Ð¼Ð½Ð¾Ð³Ð¸Ñ ÑлÑÑаÑÑ ÑÑо пÑеимÑÑеÑÑво Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð´Ð¾ÑÑигнÑÑо Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð²Ñеменной пеÑеменной Ð´Ð»Ñ Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ ÑÑÑлки на нÑжнÑй обÑекÑ.
Contra: ÐпеÑаÑÐ¾Ñ with заÑÑавлÑÐµÑ ÑказаннÑй обÑÐµÐºÑ Ð±ÑÑÑ Ð½Ð°Ð¹Ð´ÐµÐ½Ð½Ñм ÑнаÑала ÑÑеди вÑÐµÑ Ð¸Ð¼Ñн поиÑка. ÐоÑÑÐ¾Ð¼Ñ Ð²Ñе иденÑиÑикаÑоÑÑ, коÑоÑÑе не оÑноÑÑÑÑÑ Ðº ÑÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¼Ñ Ð¾Ð±ÑекÑÑ, бÑдÑÑ Ð¾Ð±Ð½Ð°ÑÑживаÑÑÑÑ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½ÐµÐµ в блоке «with. Там, где важна пÑоизводиÑелÑноÑÑÑ, «with» ÑледÑÐµÑ Ð¸ÑполÑзоваÑÑ ÑолÑко Ð´Ð»Ñ Ð¾Ñ Ð²Ð°Ñа блоков кода, коÑоÑÑе обÑаÑаÑÑÑÑ Ðº Ñленам Ñказанного обÑекÑа.
Ambiguity contraContra: The with
statement makes it hard for a human reader or JavaScript compiler to decide whether an unqualified name will be found along the scope chain, and if so, in which object. So given this example:
function f(x, o) {
with (o) {
console.log(x);
}
}
Only when f
is called is x
either found or not, and if found, either in o
or (if no such property exists) in f
's activation object, where x
names the first formal argument. If you forget to define x
in the object you pass as the second argument, or if there's some similar bug or confusion, you won't get an error â just unexpected results.
Contra: Code using with
may not be forward compatible, especially when used with something other than a plain object. Consider this example:
function f(foo, values) {
with (foo) {
console.log(values);
}
}
If you call f([1,2,3], obj)
in an ECMAScript 5 environment, then the values
reference inside the with
statement will resolve to obj
. However, ECMAScript 6 introduces a values
property on Array.prototype
(so that it will be available on every array). So, in a JavaScript environment that supports ECMAScript 6, the values
reference inside the with
statement will resolve to [1,2,3].values
.
with
ÐоÑледÑÑÑее иÑполÑзование with
ÑказÑÐ²Ð°ÐµÑ ÑÑо ÐбÑÐµÐºÑ Math
ÑвлÑеÑÑÑ Ð¾Ð±ÑекÑом по ÑмолÑаниÑ. СледÑÑÑие инÑÑÑÑкÑии за with
ÑÑÑлаÑÑÑÑ Ð½Ð° ÑвойÑÑва PI
и меÑÐ¾Ð´Ñ [cos
]](/ru/docs/Web/JavaScript/Reference/Global_Objects/Math/cos) и [sin
]](/ru/docs/Web/JavaScript/Reference/Global_Objects/Math/sin), без ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð¾Ð±ÑекÑа. JavaScript пÑÐµÐ´Ð¿Ð¾Ð»Ð°Ð³Ð°ÐµÑ ÐбÑÐµÐºÑ Math
Ð´Ð»Ñ ÑÑиÑ
ÑпÑавок.
var a, x, y;
var r = 10;
with (Math) {
a = PI * r * r;
x = r * cos(PI);
y = r * sin(PI / 2);
}
СпеÑиÑикаÑии СовмеÑÑимоÑÑÑ Ñ Ð±ÑаÑзеÑами СмоÑÑиÑе Ñакже
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