distinguindo avaliar () e new function () em javascript
em javascript, os desenvolvedores geralmente encontram duas funções que parecem executar uma tarefa semelhante: avalia () e nova função (). Embora ambas as funções avaliem as seqüências de strings como código, seus mecanismos e implicações subjacentes são significativamente diferentes. Isso significa que ele tem acesso a variáveis locais definidas no escopo atual. Por outro lado, a nova função () analisa o código JavaScript armazenado em uma string em um objeto de função, que pode ser chamado. Este objeto de função é criado em um escopo separado e, portanto, não pode acessar as variáveis locais do ambiente de chamada. return evun ('(' string ')'); } var func = function (string) { return (nova função ('return (' string ')') ()); } console.log (avaliar ('2 1')); console.log (func ('2 1'));
Ambas as funções gerarão o resultado esperado de 3. var a = 11; Eval ('(a = 22)'); // modifica a variável local na função `test1` alerta (a); // Alerta 22 } Nesse caso, usando avaliar () modificar a variável local a porque a avaliação ocorre no escopo da função Test1. No entanto, se usamos a nova função ('retornar (a = 22);') (), em vez disso, a variável local a permaneceria não afetada porque o código é executado em um escopo separado. A entrada maliciosa pode expor informações confidenciais ou executar o código arbitrário. Portanto, é altamente recomendável evitar o uso dessas funções, a menos que seja absolutamente necessário. Eval () avalia as seqüências de seqüências dentro do escopo de execução atual, enquanto a nova função () cria um novo escopo para a avaliação. Compreender essa distinção é crucial para a programação eficaz de JavaScript e manutenção da segurança.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3