<http://schema.org/articleBody>
"Qualquer um pode aprender teoria lendo posts de blogs, mas muitas pessoas nunca a entendem. Ent\u00E3o para ter certeza que o(a) candidato(a) realmente entende sobre o t\u00F3pico que ele(a) est\u00E1 falando, \u00E9 uma boa ideia testar o seus conhecimentos atrav\u00E9s de exerc\u00EDcios. Exerc\u00EDcios n\u00E3o devem demorar muito e eles podem mostrar o n\u00EDvel de profici\u00EAncia do candidato imediatamente.\r\n\r\nEstes s\u00E3o alguns exerc\u00EDcios que podem ser aplicados em entrevistas.\r\n\r\n&lt;h2&gt;Contexto(call, apply)&lt;/h2&gt;\r\nEssa \u00E9 a forma que queremos usar \"someFn\". O(a) candidato(a) deve implement\u00E1-la:\r\n&lt;pre class=\"lang-javascript\"&gt;var result = someFun({ someProperty: 'interview' }, function() {\r\n\tconsole.log('This pointing to'. this);\r\n});\r\n\r\nconsole.log('Result is', result);\r\n\r\n// Resultado esperado\r\nThis pointing to { someProperty: 'interview' }\r\nResult is 1\r\n&lt;/pre&gt;\r\nSolu\u00E7\u00E3o:\r\n&lt;pre class=\"lang-javascript\"&gt;var someFn = function(obj, cb) {\r\n\tcb.call(obj);\r\n\treturn 1;\r\n&lt;/pre&gt;\r\n&lt;h3&gt;Adicional&lt;/h3&gt;\r\nVoc\u00EA pode modificar a fun\u00E7\u00E3o para checar se o(a) candidato(a) sabe como usar o \"apply\".\r\n&lt;pre class=\"lang-javascript\"&gt;var result = someFn({ someProperty: 'interview' }, function (param1, param2) {\r\n\tconsole.log('This pointing to', this);\r\n\tconsole.log('Param 1 is', param1);\r\n\tconsole.log('Param 2 is', param2);\r\n}, ['cool', 'interview']);\r\n\r\nconsole.log('Result is', result);\r\n\r\n// Resultado esperado\r\nThis pointing to { someProperty: 'interview' }\r\nParam 1 is \"cool\"\r\nParam 2 is \"interview\"\r\nResult is 1\r\n&lt;/pre&gt;\r\nSolu\u00E7\u00E3o:\r\n&lt;pre class=\"lang-javascript\"&gt;var someFn = function (obj, cb, params) {\r\n\tcb.apply(obj, params);\r\n\treturn 1;\r\n}\r\n&lt;/pre&gt;\r\n&lt;h2&gt;Prototype e Itera\u00E7\u00E3o&lt;/h2&gt;\r\nDefinir um m\u00E9todo nativo chamado \"each\" para iterar em um array, com a op\u00E7\u00E3o de passar o contexto como segundo argumento.\r\n&lt;pre class=\"lang-javascript\"&gt;var arr = [1, 2, 3];\r\narr.each(function (arrayItem, counter) {\r\n\tconsole.log('index', counter);\r\n\tconsole.log('item', arrayItem);\r\n\r\n\tarr[counter] = arrayItem + 1;\r\n}, this);\r\n&lt;/pre&gt;\r\nSolu\u00E7\u00E3o:\r\n&lt;pre class=\"lang-javascript\"&gt;Array.prototype.each = Array.prototype.each || function (cb, context) {\r\n    for (var i = 0; i &amp;lt; this.length; i++) {\r\n        cb.call(context || this, this[i], i);\r\n    }\r\n};\r\n&lt;/pre&gt;\r\n&lt;h2&gt;Escopo&lt;/h2&gt;\r\nDefinir \"someFn\" que ir\u00E1 funcionar da seguinte maneira:\r\n&lt;pre class=\"lang-javascript\"&gt;var counter = someFn(1);\r\nconsole.log('First call', counter(3));\r\nconsole.log('Second call', counter(1));\r\nconsole.log('Third call', counter(5));\r\n\r\n// Resultado esperado\r\nFirst call 4\r\nSecond call 5\r\nThird call 10\r\n&lt;/pre&gt;\r\nSolu\u00E7\u00E3o:\r\n&lt;pre class=\"lang-javascript\"&gt;var someFn = function (start) {\r\n\tvar private = start;\r\n\r\n\treturn function (increment) {\r\n\t\tprivate += increment;\r\n\r\n\t\treturn private;\r\n\t}\r\n}\r\n&lt;/pre&gt;\r\n\r\nTraduzido de: http://goschevski.com/simple-javascript-interview-exercises/"^^<http://www.w3.org/2001/XMLSchema#string>
<http://tableless.com.br/exercicios-simples-de-javascript-para-entrevista/>