[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Statements/with [Back]  [Original]

with - JavaScript | MDN

Esta pgina foi traduzida do ingls pela comunidade. Saiba mais e junte-se comunidade MDN Web Docs.

View in English Always switch to English

with

Deprecated

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.

In this article

Sintaxe

with (expresso)
  declarao
expresso

Adiciona a dada expresso cadeia de escopo quando estiver avaliando a declarao. O parnteses em volta da expresso obrigatrio.

declarao

Qualquer declarao. Para executao multiplas declaraes, utilize a declarao em bloco ({ ... }) para agrupar estas declaraes.

Descrio

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.

Pros & contras de perfomance

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 de ambiguidade

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:

js
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:

js
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.

Exemplos

Usando with

A 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.

js
var a, x, y;
var r = 10;

with (Math) {
  a = PI * r * r;
  x = r * cos(PI);
  y = r * sin(PI / 2);
}

Especificaes

Specification
ECMAScript 2027 LanguageSpecification
# sec-with-statement

Compatibilidade com navegadores

Veja tambm


Web Proxy Viewer  |  New URL  |  Original Page