Javascript - Qual é a diferença entre var e let?


É uma questão de escopo.

Mas o que é escopo?

Escopo diz respeito à disponibilidade de uma variável. No javascript existem três tipos de escopos, o global, local e o de bloco. Este último foi adicionado no ES6.

Escopo global

Quando você declara uma variável fora de uma função, ela terá o escopo global, independente dela ter sido declarada com var ou let.

var teste1 = 5;

let teste2 = 10

function func() {
  console.log(teste1); // 5
  console.log(teste2); // 10
}

Neste caso ser declarada com var ou let não influencia o escopo. Será global para ambas variáveis.

Escopo local

Quando uma variável é declarada dentro de uma função ela irá possuir o escopo global. Podendo ser utilizada apenas dentro da função.

function teste1(){
    var nome = “Bruno”;
    let sobrenome = “Passos”;
    console.log(nome); // Bruno
    console.log(sobrenome); // Passos
}

function teste2(){
    console.log(nome); // erro
    console.log(sobrenome); // erro
}

console.log(nome) // erro
console.log(sobrenome); // erro

Desta forma podemos ver que a variável declarada dentro da função com var ou let estará disponível apenas dentro da função.

Escopo de bloco

Aqui veremos a grande diferença entre var e let. Para entendermos como funciona os escopo de bloco precisamos saber primeiro o que é um bloco. De forma simples podemos dizer que um bloco é tudo que estiver entre chaves ({}). Vemos em estruturas de condição, de repetição e outras entidades que trabalham com blocos. Desta forma podemos concluir que uma variável com escopo de bloco, é uma variável que foi declarada dentro de um determinado bloco. Ou seja, dentro de if, for, while, etc…

A única forma declarar uma variável dentro do escopo de bloco é utilizando a variável let.

var nota1 = 8;
var nota2 = 5;

if (nota1 >= 7) {
  let resultado1 = "Aprovado";
  console.log(resultado1); // Aprovado
}

console.log(resultado1); // erro

if (nota2 < 7) {
  var resultado2 = "Reprovado";
  console.log(resultado2); // Reprovado
}

console.log(resultado2); // Reprovado

function func() {
  console.log(resultado1); // erro
  console.log(resultado2); // Reprovado
}

Agora vemos que a variável que foi declarada com let dentro do if só pode ser acessada dentro dele, enquanto que a que foi declarada com var dentro de outro if também pode ser acessada de outros lugares.


Continuar lendo...

Converter string de data para date em AngularJS


Algumas vezes podemos querer utilizar um dado do back-end para um componente de date sem usar o ajax conforme abaixo.

<input type="date" name="data" class="form-control" ng-model="data" ng-init="data=<?php echo $data;?> >

Porém este código irá retornar o erro abaixo:

Expected `0000-00-00` to be a date

Isso acontece porque em um input do tipo date o angular não aceita que seja string e erpara que seja um date do javascript.

Para resolver este problema você deve criar uma função em seu controle para realizar a conversão.

$scope.converteData = function(string){
    var array_data = string.split('-');
    var data = new Date(array_data[0], array_data[1]-1, array_data[2]);
    return data;
};

Agora chame a função em seu html da seguinte forma:

<input type="date" name="data" class="form-control" ng-model="data" ng-init="data=converteData('<?php echo $data;?>') >

Não esqueça das aspas simples em torno da tag do back-end

 


Continuar lendo...