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>