Skip to content

Instantly share code, notes, and snippets.

@adamsalves
Created January 11, 2019 01:17
Show Gist options
  • Save adamsalves/20af4f1846e87c43913cc22bc49c361d to your computer and use it in GitHub Desktop.
Save adamsalves/20af4f1846e87c43913cc22bc49c361d to your computer and use it in GitHub Desktop.
Teste JS Focus
// Teste: código fonte disponível em http://github.com/Spagiari/jstest
// Avalie as funções abaixo e responda as perguntas.
var a;
function teste1() {
var a = 3;
}
teste1();
console.log(a === 3);
/* ***********************************
* (1) Por que o valor falso é escrito no console?
* ***********************************/
/*
* Porque a variável a é undefined. Temos aí um problema de escopo. A
* variável só tem valor '3' dentro da função. Como temos duas variáveis * 'a',
* o console.log está verificando se a variável 'a' fora da função * é igual a 3.
*/
function teste2() {
var something = false;
setTimeout(function() {
something = true;
}, 0);
console.log('something', something);
}
teste2();
/* ***********************************
* (2) Qual o valor escrito no console e por quê?
* ***********************************/
/*
* O valor do log é false, porque a atribuição do setTimeout só irá ocorrer ao final de um determinado tempo ou
* depois de terminada a leitura da função. Então o valor evaluado primeiro será o atribuído no começo da função
*/
function inc(i) {
i++;
}
function teste3() {
var i = 0;
inc(i);
console.log(i);
}
teste3();
/* ***********************************
* (3) Quais os valores escritos no console e por quê?
* ***********************************/
/*
* O valor escrito é 0, porque apesar i ser incrementado
* dentro da função 'inc', log feito pela função teste3 é da atribuição inicial de i que é 0.
*/
function teste4() {
var value = 10;
return (function() {
return value;
})
}
func = teste4();
console.log(func());
/* ***********************************
* (4) Qual o valor escrito no console e por quê?
* ***********************************/
/*
* O valor é 10, porque o retorno da função é outra função que tem
* acesso ao valor dentro da função pai. Já no log da função, teste4 é atribuída a uma variável global, 'func',
* uma má prática em javascript
*/
// A função shuffle recebe como entrada uma array e a embaralha.
function shuffle(a) {
// atribui a variável n a quantidades de elementos da array a.
n = a.length;
// Percorre a array a da posição 0 até a ultima posição.
for (var i = 0; i < n; i++) {
//Sorteia uma posição aleatória entre i e n-1 e atribui para a variável swap
swap = i + Math.floor(Math.random() * (n - i - 1));
// Troca os valores das posições i e swap da array a.
var aux = a[i];
a[i] = a[swap];
a[swap] = aux;
}
}
var array = [5, 3, 1, 4, 2];
if (shuffle(array)) console.log(array);
/* *********************************
* (5) Existem potenciais armadilhas (pitfalls) na função acima?
* Se SIM qual é ou quais são? Comente a resposta.
* *********************************/
/*
* Acredito que não há. Porque todos os valores do array original
* retornam embaralhados no novo array, somente a troca do índicedo
* array é feita.
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment