| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Statements/with | [Back] [Original] |
Get to know MDN better
Esta pgina foi traduzida do ingls pela comunidade. Saiba mais e junte-se comunidade MDN Web Docs.
Avoid using this feature in new projects.
JavaScript strict mode prohibits the with statement.
This feature may be a candidate for removal from web standards or browsers.
Consider using the following features instead: Destructuring.
Aviso:
O uso da declarao with no recomendado, isso porque ele pode ser a fonte de bugs confusos e problemas de compatibilidade. Veja o pargrafo "Contra de ambiguidade" na seo "Descrio" para mais detalhes.
A declarao with extende a cadeia de escopo para uma declarao.
with (expresso) declarao
expressoAdiciona a dada expresso cadeia de escopo quando estiver avaliando a declarao. O parnteses em volta da expresso obrigatrio.
declaraoQualquer declarao. Para executao multiplas declaraes, utilize a declarao em bloco ({ ... }) para agrupar estas declaraes.
JavaScript procura por um nome no qualificado procurando uma cadeia de escopo associada execuo do contexto do script ou funo contendo um nome no qualificado. A declarao 'with' adiciona o dado objeto frenet dessa cadeia de escopo durante a validao desse corpo de declaraes. Se um nome no qualificado usado no corpo for igual ao de uma propriedade na cadeia de escopo, ento o nome ficar ligado propriedade e ao objeto contendo a propriedade. Seno, um ReferenceError ser invocado.
Nota:
Usar with no recomendado, e est probido no strict mode do ECMAScript 5. A alternativa recomendada atribuir o objeto cujas propriedades voc quer acessar a uma varivel temporria.
Pro: A declarao with pode ajudar o tamanho do arquivo por reduzir a necessidade de repetir a referncia a um objeto longo sem penalidade na perfomance. A cadeia de escopo mudada por um 'with' no computacionalmente cara. O uso de 'with' ir aliviar o interpretador de tratar repetidamente as referncias. Note que, no entando, isso em muitos casos pode ser substitudo usando uma varivel temporria para armazenar a referncia do objeto desejado.
Contra: A declarao with fora que o objeto especifcado a ser procurado primeiro por pesquisas de nome. Assim sendo, todos os indentificadores que no so membros do objeto espeficcado vo ser encontrados mais lentamente em um bloco 'with'. Onde a perfomance importande, 'with' deve ser usado apenas para englobar blocos de cdigo que acessam membros de um objeto especifco.
Contra: A declarao with faz ser difcil para um leitor humano ou compilador JavaScript decidir se um nome no qualificado var se encontrado em uma cadeia de escopo, e tambm, em qual objeto. Dado o exemplo seguinte:
function f(x, o) {
with (o) {
console.log(x);
}
}
Apenas quando f chamado x ou encontrado ou no, e se for encontrado, ou em o ou (se nenhuma propriedade existir) no objeto de ativao de f, onde o nome de x o primeiro argumento formal. Se voc esquecer de definir x no objeto que voc passou como segundo argumento, ou se h algum bug similar ou confuso, voc no vai receber um erro apenas resultados inesperados.
Contra: Cdigo utilizando with talvez no seja compatvel posteriormente, especialmente quando usado com algo que no seja um objeto simples. Considere esse exemplo:
function f(foo, values) {
with (foo) {
console.log(values);
}
}
Se voc chamar f([1,2,3], obj) em um ambiente ECMAScript 5, ento a referncia de values dentro da declarao with ir ser obj. No entando, ECMAScript 6 introduz uma propriedade values no Array.prototype (ento isso estar disponvel em todas as arrays). Ento, em um ambiente JavaScript que suporta ECMAScript 6, a referncia de values dentro da declarao with ir ser [1,2,3].values.
withA seguinte declarao with ir especificar que o objeto Math o objeto padro. As seguintes declaraes seguindo a declarao with iro referir a propriedade PI e aos mtodos cos e sin, sem especificar um objeto. JavaScript assume o objeto Math para essas referncias.
var a, x, y;
var r = 10;
with (Math) {
a = PI * r * r;
x = r * cos(PI);
y = r * sin(PI / 2);
}
| Specification |
|---|
| ECMAScript 2027 LanguageSpecification # sec-with-statement |
This page was last modified on 22 de mai. de 2026 by MDN contributors.
Your blueprint for a better internet.
Portions of this content are 19982026 by individual mozilla.org contributors. Content available under a Creative Commons license.
| Web Proxy Viewer | New URL | Original Page |