O que é strict mode?
Já aconteceu da sua função não funcionar e você nem sequer saber o motivo? Provavelmente o strict mode resolveria esse problema
Diversos erros podem acontecer ao programar, porém nem todos são evidenciados no Javascript. Alguns erros nem sequer são tratados como erros e funcionam (de uma forma não correta do ponto de vista de boas práticas)
Com o ECMAScript 5, foi introduzido o "strict mode", um modo que, ao ser declarado, basicamente força o Javascript a não permitir certos comportamentos, acusar erros e parar a execução do código.
A sintaxe do strict mode é simples, base utilizar "use strict" no código. O uso pode ser tanto dentro da função (funcionará apenas na função), quanto fora (funcionará no código inteiro).
Vamos ao exemplo:
function ola() {
let nome = "Caio";
console.log("Olá, " + nome)
}
Até aí, nada demais. Mas e se removermos a declaração da variável?
function olaSemStrict() {
nomeGlobal = "Caio";
console.log("Olá, " + nomeGlobal)
}
Pendurar variáveis no objeto Window não é algo recomendável. Por isso, o strict mode pode ser de grande ajuda.
function olaComStrict() {
"use strict"
nomeStrict = "Caio";
console.log("Olá, " + nomeStrict)
}
O Javascript não deixa mais atribuir valor a uma variável que ainda não foi declarada
E o caso de erros silenciosos?
Vamos ao seguinte código:
class Aluno {
get nota() {
return 6;
}
}
let aluno
function criarInstanciaAluno() {
aluno = new Aluno()
console.log(aluno)
}
function atribuirNotaAluno() {
aluno.nota = 10
}
function mostrarNotaAluno() {
console.log(aluno)
}
function atribuirNotaAlunoComStrict() {
'use strict'
aluno.nota = 10
console.log(aluno.nota)
}
Caso você queira atribuir uma nota diferente para uma instância de uma classe que apenas tem um getter, o JavaScript não deixa.
Um último exemplo... E se tentarmos apagar um objeto que não pode ser delatado? Que tal o Window.document (seria um desespero).
function tentarMatarDevDoCoracao() {
delete window.document
}
function verificarSeAindaExiste() {
console.log(window.document)
}
function naoMatarDevDoCoracao() {
'use strict'
delete window.document
}
Vemos que com o strict mode, podemos verificar problemas que, sem ele, passariam despercebidos e poderiam ser prejudiciais para o bom funcionamento do código.