Qualquer um pode aprender teoria lendo posts de blogs, mas muitas pessoas nunca a entendem. Então para ter certeza que o(a) candidato(a) realmente entende sobre o tópico que ele(a) está falando, é uma boa ideia testar o seus conhecimentos através de exercícios. Exercícios não devem demorar muito e eles podem mostrar o nível de proficiência do candidato imediatamente.
Estes são alguns exercícios que podem ser aplicados em entrevistas.
Contexto(call, apply)
Essa é a forma que queremos usar “someFn”. O(a) candidato(a) deve implementá-la:
var result = someFun({ someProperty: 'interview' }, function() { console.log('This pointing to'. this); }); console.log('Result is', result); // Resultado esperado This pointing to { someProperty: 'interview' } Result is 1
Solução:
var someFn = function(obj, cb) { cb.call(obj); return 1;
Adicional
Você pode modificar a função para checar se o(a) candidato(a) sabe como usar o “apply”.
var result = someFn({ someProperty: 'interview' }, function (param1, param2) { console.log('This pointing to', this); console.log('Param 1 is', param1); console.log('Param 2 is', param2); }, ['cool', 'interview']); console.log('Result is', result); // Resultado esperado This pointing to { someProperty: 'interview' } Param 1 is "cool" Param 2 is "interview" Result is 1
Solução:
var someFn = function (obj, cb, params) { cb.apply(obj, params); return 1; }
Prototype e Iteração
Definir um método nativo chamado “each” para iterar em um array, com a opção de passar o contexto como segundo argumento.
var arr = [1, 2, 3]; arr.each(function (arrayItem, counter) { console.log('index', counter); console.log('item', arrayItem); arr[counter] = arrayItem + 1; }, this);
Solução:
Array.prototype.each = Array.prototype.each || function (cb, context) { for (var i = 0; i < this.length; i++) { cb.call(context || this, this[i], i); } };
Escopo
Definir “someFn” que irá funcionar da seguinte maneira:
var counter = someFn(1); console.log('First call', counter(3)); console.log('Second call', counter(1)); console.log('Third call', counter(5)); // Resultado esperado First call 4 Second call 5 Third call 10
Solução:
var someFn = function (start) { var private = start; return function (increment) { private += increment; return private; } }
Traduzido de: https://goschevski.com/simple-javascript-interview-exercises/