Created
January 11, 2019 01:17
-
-
Save adamsalves/20af4f1846e87c43913cc22bc49c361d to your computer and use it in GitHub Desktop.
Teste JS Focus
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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