As palavras anteriores
Eval e com frequentemente não gostam, como se a existência deles fosse um erro. No CSS, as tabelas não gostam e usam apenas tabelas para exibir dados nas páginas da web, em vez de layout, podem ser negadas como irregulares e supercorretas. Então, qual é a situação sobre avaliação e com? Este artigo apresentará a função EVALL () e com a declaração em detalhes
aval
definição
Eval () é uma função global. O JavaScript usa avaliar () para explicar a sequência em execução composta pelo código -fonte JavaScript.
var resultado = avaliar ('3+2'); console.log (resultado, tipo de resultado); // 5 'número'uso
Eval () possui apenas um parâmetro. Se o parâmetro passado não for uma string, ele retornará diretamente este parâmetro. Se o parâmetro for uma string, ele compilará a sequência como código JavaScript. Se a compilação falhar, uma exceção de erro de sintaxe (SyntaxError) será lançada. Se a compilação for bem -sucedida, o código será executado e o valor da última expressão ou instrução na string será retornado e, se a última expressão ou instrução não tiver valor, ela retornará indefinida. Se uma string lançar uma exceção, a exceção passará a chamada para avaliar ()
var num = 1; var str = 'teste'; console.log (avaliar (num)); // 1console.log (avaliar (str)); // referenceError: o teste não é definido var strlong1 = 'var x = 1; var y = 2; x ++; '; console.log (Eval (strlong2), x); // 1 2
Escopo
Eval () usa o ambiente de escopo variável que o chama. Ou seja, procura o valor de uma variável e define a operação de uma nova variável e função e o código no escopo local.
var b = 2; função foo (str, a) {avaliar (str); console.log (a, b);} foo ('var b = 3;', 1); // 1 3Alias
Quando chamado por meio de um pseudônimo, Eval () executará sua string como o código global de nível superior. O código executado pode definir novas variáveis globais e funções globais ou atribuir valores a variáveis globais, mas não pode usar ou modificar variáveis locais na função.
var geval = avaliação; var x = 'global', y = 'global'; função f () {var x = 'local'; avaliar ('x += "alterado";'); retornar x;} função g () {var y = 'local'; geval ('y += "alterado";'); retornar y;} console.log (f (), x); // local global -canConsole.log (g (g), y;[Nota] IE8-o navegador chama Eval () através de um alias e chama Eval () normalmente o mesmo resultado.
efeito colateral
O intérprete JavaScript executa muita análise e otimização de código. O problema com avaliar () é que o código usado para execução dinâmica geralmente não é analisado; portanto, o intérprete não pode otimizá -lo, o que levará à degradação do desempenho
Semelhante a avaliar () são setTimeout (), setInterval (), new function (), etc. Essas funções podem ser executadas dinamicamente quando o programa é executado usando strings como parâmetros. Os benefícios desse mecanismo de execução não podem compensar suas perdas de desempenho; portanto, você deve evitar usá -lo.
Modo rigoroso
Como a função EVALL () é muito poderosa, o modo rigoroso o restringe estritamente
【1】 Variáveis ou funções não podem ser criadas através da função Eval (), mas seus valores podem ser consultados e alterados
'Use Strict'; Eval ('var x = 1;'); console.log (x); // referenceError: x não é definido 'use rigiction'; var x = 1; avaliar ('x = 2;'); console.log (x); // 2【2】 Incapaz de usar avaliar como identificador
'Use Strict'; Var Eval = 10; // SyntaxError: avaliação inesperada ou argumentos no modo rigoroso
com
O objetivo de definir com declarações é simplificar o trabalho de escrever o mesmo objeto várias vezes.
A declaração com com o objeto à cabeça da cadeia de escopo, depois executa a declaração e finalmente restaura a cadeia de escopo ao seu estado original.
com (objeto) {declaração;}efeito
Quando o nível de nidificação de objetos é profundo, com as declarações geralmente são usadas para simplificar a redação do código. Em essência, é processado tratando a referência de um objeto como um escopo e usando os atributos do objeto como identificadores no escopo, criando assim um novo escopo lexical
No JavaScript do cliente, uma expressão como a seguinte pode ser usada para acessar elementos em uma forma HTML
document.forms [0] .address.value
Se essa expressão aparecer várias vezes no código, você poderá usar a instrução with para adicionar o objeto de formulário ao nível superior da cadeia de escopo
com (document.forms [0]) {name.value = ''; endereço.value = ''; emai.value = '';}Este método reduz muita entrada sem precisar prefixar document.forms [0] para cada nome da propriedade. Este objeto é montado temporariamente na corrente do escopo. Quando o JavaScript precisa analisar identificadores como o endereço, ele pesquisará automaticamente neste objeto.
[Nota] A declaração com um atalho para ler as propriedades de um objeto, mas não pode criar propriedades de um objeto
Se o objeto O tiver um atributo x, o código a seguir atribui o valor do atributo a 1
var o = {x: 0}; com (o) x = 1; console.log (ox); // 1Se nenhum atributo x for definido em O, o código a seguir será exatamente o mesmo que o código x = 1 que não usa a instrução com com. Isso ocorre porque a consulta do LHS é realizada na variável x e 1 é atribuída a ela
var o = {}; com (o) x = 1; console.log (ox); // undefinedconsole.log (x); // 1efeito colateral
Semelhante à avaliação, o código JavaScript da instrução com com a otimização é muito difícil de otimizar e também causa dificuldades em depurar o código. É mais lento que o código que não usa a instrução com.
Além disso, se a declaração com com a inapropriada, pode causar vazamento variável e poluir o escopo global.
var x = 1; var o = {}; com (o) {x = 2;} console.log (x); // 2console.log (ox); // indefinidoModo rigoroso
No modo rigoroso, é proibido o uso de com as declarações
// SyntaxError: o código de modo rigoroso pode não incluir um com instrução
afinal
Usar avaliar e tornar impossível para o motor otimizar as pesquisas de escopo no momento da compilação, resultando em degradação do desempenho e código mais lento em execução. Porque avaliar e raramente são usados no trabalho real, as restrições no modo rigoroso têm pouco impacto em nós. Assim como o Ministério das Relações Exteriores emitiu um anúncio um dia de que nosso país não emitirá mais vistos para a Jamaica. Embora tenhamos ouvido falar da Jamaica, a maioria das pessoas pode não ir lá uma vez em suas vidas, então isso não importa. Da mesma forma, não importa se avaliar e não gostar ou não
O exposto acima é uma explicação detalhada do resumo do aprendizado de JavaScript que o editor apresentou a você sobre a função de avaliação é desprezada e com exemplos de declaração. Espero que seja útil para você. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a você a tempo. Muito obrigado pelo seu apoio ao site wulin.com!