Sobre a diferença javascript entre o modo estrito e modo normal

Qual é o modo estrito

Em adição ao modo de operação normal, JavaScript existe um segundo modo de funcionamento: modo estrito (modo estrito). Como o nome sugere, este modelo adota sintaxe JavaScript mais rigorosas.
O mesmo código no modo normal e o modo estrito, pode haver diferentes resultados operacionais. Alguns podem ser executados em comunicado modo normal, não será executado no modo estrito.
modo estrito: para evitar os js em solto lugar não-padrão, código de segurança reforçada para melhorar a eficiência do compilador compilador, lançando as bases para versões posteriores.

projetado para

precoce de línguas JavaScript existem muitos lugar mal projetado, mas para compatibilidade com o código anterior, não altere a sintaxe antiga, só pode continuar a adicionar nova sintaxe para os programadores de ajuda usar a nova sintaxe.
modo estrito é entrado do ES5 padrão, há vários propósito principal.
A. proíbe expressamente razoável, não estrita sintaxe, reduzindo algum do comportamento bizarro da linguagem JavaScript.
II. Para mais ocasiões para aumentar o erro, remova parte do código insegurança execução, para garantir a operação segura do código.
III. Compilador para melhorar a eficiência, aumentar a velocidade de operação.
IV. Pavimentar o caminho para futura nova versão da sintaxe JavaScript.
Em suma, o modo estrito JavaScript reflete a direção de desenvolvimento mais razoável, mais seguro e mais rigorosa

método de permitir

Mark de modo estrito, uma linha de corda usar rigoroso.
'Use strict'; estrita estrita
versão antiga do motor vai usá-lo como uma linha de corda ordinária, a ser ignorado. A nova versão do motor entra em modo rigoroso.
modo estrito pode ser usado durante todo o roteiro, ele pode ser usado apenas para uma única função de
todo o arquivo script:
use strict colocado na primeira linha do arquivo de script, todo o roteiro será modo estrito. Se esta linha não é a primeira linha da demonstração é inválida, todo o script seria executado no modo normal.
(Estritamente falando, não produzido, enquanto a afirmação anterior dos resultados da operação real, utilize estrito pode não ser a primeira linha, directamente por trás de um ponto e vírgula, tais vazio, ou por trás do comentário.)

<script>
  'use strict';
   console.log('这是严格模式');
</script>
<script>
   console.log('这是正常模式');
</script>

O código acima, existem duas seções de um arquivo de página web em código JavaScript virar. anterior

<script>
  console.log('这是正常模式');
  'use strict';
</script>

função única:
usar função estrita na primeira linha do corpo, a totalidade das pistas de função no modo rigoroso.

function strict() {
  'use strict';
  return '这是严格模式';
}
function notStrict() {
  return '这是正常模式';
}

declarações de variáveis (var tem de ser utilizado)
funções não podem ter o mesmo nome do parâmetro
no modo normal, se a função tem uma pluralidade de parâmetros do mesmo nome, pode ser lido com argumentos [i]. No modo rigoroso, o que é um erro de sintaxe.

function f(a, a, b) {
  'use strict';
  return a + b;
}

Octal 0 prefixo notação proibição
no modo normal, se for o primeiro número inteiro 0, isso indica que este é um número octal, tal como 0100 igual a 64 decimal. Modo estrito proibir essa representação, o primeiro inteiro é zero, um erro.

'use strict';
var n = 0100;

Proibição para o objectivo global esta palavra-chave
no modo normal, o funcionamento interno desta pode apontar para o objecto global (janela), este uso é estritamente proibida modo, para evitar a criação de, inadvertidamente, uma variável global.

function f() {// 正常模式
  console.log(this === window);
}
f() // true
function f() {// 严格模式
  'use strict';
  console.log(this === undefined);
}
f() // true

No código acima, o corpo da função dentro deste modo estrito é indefinido. Esta limitação é particularmente útil para o construtor. Ao usar o construtor, às vezes eu esqueci de acrescentar nova novo, mais desta vez o objeto global, mas dado.

function f() {
  'use strict';
  this.a = 1;
};f();// 报错,this 未定义

No modo estrito, com a declaração de um erro.

'use strict';
var obj = {v:1};
with (obj) {  // SyntaxError: Strict mode code may not include a with statement
  v = 2;//obj.v = 2;
}

Equivalente
obj.v
criar escopo eval
modo normal, a linguagem JavaScript, há dois escopo de variáveis (escopo): escopo global e âmbito da função. A criação de um modo estrito terceiro Âmbito: escopo eval.
No modo normal, as declarações âmbito eval, dependendo se ele está no escopo escopo ou função global. No modo estrito, declaração eval é em si um escopo, não é capaz de criar novas variáveis no âmbito da sua operação, isto é, variáveis eval gerado só pode ser usado para eval interno.

(function () {
  'use strict';
  var x = 2;
  console.log(eval('var x = 5; x')) // 5
  console.log(x) // 2
})()

O código acima, uma vez que a declaração eval interno é um espaço independente, para o interior da variável x não vaza para o exterior
a variáveis de exclusão
por palavra-chave delete delete
normalmente para excluir o objeto com delete valores de atributos e nomes de atributos-chave
também pode ser usado para excluir variáveis de modo não declarado normais são variáveis var deixe declaração const não pode ser excluído no modo normal,
eliminar o identificador exibido declarou, nome e função chamada com delete.
No modo rigoroso
apenas propriedades do objecto configuráveis definida como verdadeiro, e pode ser excluído.

   "use strict";
  var x;
  delete x; // 语法错误
  var obj = Object.create(null, {'x': {
      value: 1,
      configurable: true
  }});
  delete oobj.x; // 删除成功

argumentos Os
argumentos A tem um aspecto muito interessante no modo estrito
modo Normal

function f(x){
  console.log(arguments[0]);
  x=20;
  console.log(arguments[0])
}
f(10) // 10  20 

Em estrita modo de
parâmetro conhecido é uma cópia estática do parâmetro argumentos, ao invés de referência.

<script>
    'use strict';
    function fun() {
        console.log(arguments[0]);
        arguments[0] = 20
        console.log(arguments[0]);
    }
    fun(10) // 10 20
    
    function f(x) {
        console.log(arguments[0]);
        arguments[0] = 20;
        console.log(x);
        x = 30
        console.log(arguments[0])
        console.log(x);
    }
    f(10) // 10  20 30
</script>

No caso, se o nome ou parâmetros sem nome que modificar os argumentos [0] pode ser modificado
no caso de parâmetros bem conhecidos que modificar os argumentos [0] parâmetros descobertos e nomeados sem qualquer conflito
com o nome do parâmetro é o valor que modificar os parâmetros nomeados
argumentos [0] é um outro valor que modificado

Nome da função parâmetro declaração pode repetir
o modo normal
parâmetro faz com que a declaração de função dentro do mesmo parâmetro de impressão valor do parâmetro de seleção do segundo

<script>
    function fun(a, a) {
        console.log(a);
    }
    fun(10, 20) // 20
</script>

Estrita de erro modo direto

<script>
    'use strict';
    function fun(a, a) {
        console.log(a);
    }
    fun(10, 20) // Uncaught SyntaxError: Duplicate parameter name not allowed in this context
</script>
Lançado quatro artigos originais · ganhou elogios 1 · vista 126

Acho que você gosta

Origin blog.csdn.net/lemon_hongcha/article/details/104625224
Recomendado
Clasificación