<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>JavaScript: Singuska &#187; funções</title>
	<atom:link href="http://javascript.singuska.com/tag/funcoes/feed/" rel="self" type="application/rss+xml" />
	<link>http://javascript.singuska.com</link>
	<description>Fragmentos de código e gambiarras (0.2)</description>
	<lastBuildDate>Mon, 03 Oct 2011 19:45:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>Uma interface simples para setInterval e clearInterval</title>
		<link>http://javascript.singuska.com/2011/10/03/uma-interface-simples-para-setinterval-e-clearinterval/</link>
		<comments>http://javascript.singuska.com/2011/10/03/uma-interface-simples-para-setinterval-e-clearinterval/#comments</comments>
		<pubDate>Mon, 03 Oct 2011 19:45:27 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Outros]]></category>
		<category><![CDATA[fragmento]]></category>
		<category><![CDATA[funções]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=620</guid>
		<description><![CDATA[Abaixo um código para faciliar o uso de intervals e minimizar o uso de variáveis globais: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 var interval = &#40;function&#40;&#41;&#123; &#160; var ids = &#123;&#125;, names = &#123;&#125;; &#160; return &#123; add: function&#40;name, timer, fn&#41; &#123; var interval = [...]]]></description>
			<content:encoded><![CDATA[<p>Abaixo um código para faciliar o uso de intervals e minimizar o uso de variáveis globais:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> interval <span style="color: #ffffff;">=</span> <span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#123;</span>
&nbsp;
	<span style="color: #fbde2d; font-weight: bold;">var</span> ids <span style="color: #ffffff;">=</span> <span style="color: #ffffff;">&#123;</span><span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">,</span> names <span style="color: #ffffff;">=</span> <span style="color: #ffffff;">&#123;</span><span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">;</span>
&nbsp;
	<span style="color: #fbde2d; font-weight: bold;">return</span> <span style="color: #ffffff;">&#123;</span>
		add<span style="color: #ffffff;">:</span> <span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span><span style="color: red;">name</span><span style="color: #ffffff;">,</span> timer<span style="color: #ffffff;">,</span> fn<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
			<span style="color: #fbde2d; font-weight: bold;">var</span> interval <span style="color: #ffffff;">=</span> setInterval<span style="color: #ffffff;">&#40;</span>fn<span style="color: #ffffff;">,</span> timer<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
			ids<span style="color: #ffffff;">&#91;</span>interval<span style="color: #ffffff;">&#93;</span> <span style="color: #ffffff;">=</span> <span style="color: red;">name</span><span style="color: #ffffff;">;</span>
			names<span style="color: #ffffff;">&#91;</span><span style="color: red;">name</span><span style="color: #ffffff;">&#93;</span> <span style="color: #ffffff;">=</span> interval<span style="color: #ffffff;">;</span>
		<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">,</span>
		<span style="color: red;">stop</span><span style="color: #ffffff;">:</span> <span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span><span style="color: red;">name</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
			clearInterval<span style="color: #ffffff;">&#40;</span>names<span style="color: #ffffff;">&#91;</span><span style="color: red;">name</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
		<span style="color: #ffffff;">&#125;</span>
	<span style="color: #ffffff;">&#125;</span>
&nbsp;
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>A utilização aconteceria mais ou menos assim:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">function</span> coisas_legais<span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
   <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'Função legal'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: #ffffff;">&#125;</span>
&nbsp;
interval.<span style="color: #6591f7;">add</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'invervalo_legal'</span><span style="color: #ffffff;">,</span> <span style="color: #f78465;">300</span><span style="color: #ffffff;">,</span> coisas_legais<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Para parar a execução deste intervalo:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">interval.<span style="color: red;">stop</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'intervalo_legal'</span><span style="color: #ffffff;">&#41;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2011/10/03/uma-interface-simples-para-setinterval-e-clearinterval/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Click interrompido</title>
		<link>http://javascript.singuska.com/2011/06/22/click-interrompido/</link>
		<comments>http://javascript.singuska.com/2011/06/22/click-interrompido/#comments</comments>
		<pubDate>Wed, 22 Jun 2011 04:51:48 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Fragmento]]></category>
		<category><![CDATA[Gambiarra]]></category>
		<category><![CDATA[funções]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=605</guid>
		<description><![CDATA[Um padrão recorrente na programação em jQuery é executar uma função quando um link é clicado e, concomitantemente, evitar o que navegador carrege uma nova página ao ser clicado. É possível criar uma função que sirva de atalho para esta tarefa repetitiva: 1 2 3 4 5 6 $.fn.extend&#40;&#123;clickPrevented: function&#40;fn&#41; &#123; $&#40;this&#41;.click&#40;function&#40;e&#41; &#123; e.preventDefault&#40;&#41;; fn&#40;e&#41;; [...]]]></description>
			<content:encoded><![CDATA[<p>Um padrão recorrente na programação em jQuery é executar uma função quando um link é clicado e, concomitantemente, evitar o que navegador carrege uma nova página ao ser clicado. É possível criar uma função que sirva de atalho para esta tarefa repetitiva:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$.<span style="color: #6591f7;">fn</span>.<span style="color: #6591f7;">extend</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#123;</span>clickPrevented<span style="color: #ffffff;">:</span> <span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span>fn<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
	$<span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">this</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">click</span><span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span>e<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
		e.<span style="color: #6591f7;">preventDefault</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
		fn<span style="color: #ffffff;">&#40;</span>e<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
	<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>A utilização aconteceria mais ou menos assim:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'#apenas_um_cara'</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">clickPrevented</span><span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#123;</span>
        <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'Você vai continuar nesta página após o alert.'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2011/06/22/click-interrompido/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>parseInt &#8211; convertendo strings para números inteiros</title>
		<link>http://javascript.singuska.com/2011/06/17/parseint-convertendo-strings-para-numeros-inteiros/</link>
		<comments>http://javascript.singuska.com/2011/06/17/parseint-convertendo-strings-para-numeros-inteiros/#comments</comments>
		<pubDate>Fri, 17 Jun 2011 18:08:26 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Fragmento]]></category>
		<category><![CDATA[funções]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=551</guid>
		<description><![CDATA[É comum a necessidade de converter strings para inteiros. Por exemplo: se você obtiver um valor de um campo input, e precisar fazer alguma conta ou validação com esse valor é prudente converter primeiro para um número. A função que deve ser utilizada para isso chama-se parseInt. 1 2 var valor = '020'; alert&#40;parseInt&#40;valor, 10&#41;&#41;; [...]]]></description>
			<content:encoded><![CDATA[<p>É comum a necessidade de converter strings para inteiros. Por exemplo: se você obtiver um valor de um campo input, e precisar fazer alguma conta ou validação com esse valor é prudente converter primeiro para um número. A função que deve ser utilizada para isso chama-se <strong>parseInt</strong>.</p>
<p><span class="jsrun-exemplo-1 jsrun-button"> </span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> valor <span style="color: #ffffff;">=</span> <span style="color: #61ce3c;">'020'</span><span style="color: #ffffff;">;</span>
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>parseInt<span style="color: #ffffff;">&#40;</span>valor<span style="color: #ffffff;">,</span> <span style="color: #f78465;">10</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<h3>Pra que serve o segundo parâmetro?</h3>
<p>Esta função tem uma &#8220;funcionalidade&#8221; complicada. Se a string começar com &#8220;0&#8243;  ela vai ser convertida utilizando base <strong>8</strong> (<a href="http://pt.wikipedia.org/wiki/Sistema_octal">sistema octal</a>) ao invés de base <strong>10</strong>. O segundo argumento determina qual base numérica deve ser utilizada. A string <strong>20</strong> seria convertida para o número octal <strong>16</strong>. Veja o que acontece quando omitimos o segundo parâmetro:</p>
<p><span class="jsrun-exemplo-2 jsrun-button"> </span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> valor <span style="color: #ffffff;">=</span> <span style="color: #61ce3c;">'020'</span><span style="color: #ffffff;">;</span>
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>parseInt<span style="color: #ffffff;">&#40;</span>valor<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>É, portanto, boa prática sempre utilizar o segundo argumento para evitar qualquer transtorno</strong>. Ou, se você quiser treinar <a href="http://javascript.singuska.com/2010/04/03/funcoes-como-argumentos-e-funcoes-anonimas/">funções anônimas</a>, a seguinte brincadeira também é possível:</p>
<p><span class="jsrun-exemplo-3 jsrun-button"> </span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#123;</span>
	<span style="color: #fbde2d; font-weight: bold;">var</span> original <span style="color: #ffffff;">=</span> parseInt<span style="color: #ffffff;">;</span>
	parseInt <span style="color: #ffffff;">=</span> <span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span>n<span style="color: #ffffff;">,</span> b<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
		b <span style="color: #ffffff;">=</span> b <span style="color: #ffffff;">||</span> <span style="color: #f78465;">10</span><span style="color: #ffffff;">;</span>
		<span style="color: #fbde2d; font-weight: bold;">return</span> original<span style="color: #ffffff;">&#40;</span>n<span style="color: #ffffff;">,</span> b<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
	<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: #fbde2d; font-weight: bold;">var</span> valor <span style="color: #ffffff;">=</span> <span style="color: #61ce3c;">'020'</span><span style="color: #ffffff;">;</span>
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>parseInt<span style="color: #ffffff;">&#40;</span>valor<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Esse fragmento de código só precisa ser executado uma vez (no seu init.js, por exemplo). Repare que se você rodar o <b>exemplo 2 novamente</b>, o resultado já será o correto. O que fizemos foi reescrever a função parseInt usando ela mesma.</p>
]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2011/06/17/parseint-convertendo-strings-para-numeros-inteiros/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Funções como argumentos e funções anônimas</title>
		<link>http://javascript.singuska.com/2010/04/03/funcoes-como-argumentos-e-funcoes-anonimas/</link>
		<comments>http://javascript.singuska.com/2010/04/03/funcoes-como-argumentos-e-funcoes-anonimas/#comments</comments>
		<pubDate>Sat, 03 Apr 2010 21:06:52 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Outros]]></category>
		<category><![CDATA[funções]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=269</guid>
		<description><![CDATA[Funções em JavaScript podem ser passadas como argumentos de outras funções. Esta prática é inclusive muito explorada pelos programadores. Se você ainda não esta familiarizado com o uso de funções, leia este post primeiro. Vamos então aos exemplos. Funções como argumentos 1 2 3 4 5 6 7 8 9 10 function imprimir&#40;fn&#41; &#123; var [...]]]></description>
			<content:encoded><![CDATA[<p>Funções em JavaScript podem ser passadas como argumentos de outras funções. Esta prática é inclusive muito explorada pelos programadores. Se você ainda não esta familiarizado com o uso de funções, <a href="http://javascript.singuska.com/2009/12/21/funcoes-o-basico/">leia este post primeiro</a>. Vamos então aos exemplos.</p>
<h3>Funções como argumentos</h3>
<p><span class="jsrun-exemplo-1 jsrun-button"> </span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">function</span> imprimir<span style="color: #ffffff;">&#40;</span>fn<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: #fbde2d; font-weight: bold;">var</span> texto <span style="color: #ffffff;">=</span> fn<span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
    <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>texto<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span>
&nbsp;
<span style="color: #fbde2d; font-weight: bold;">function</span> gerador<span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: #fbde2d; font-weight: bold;">return</span> <span style="color: #61ce3c;">'Sou um texto!'</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span>
&nbsp;
imprimir<span style="color: #ffffff;">&#40;</span>gerador<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Neste primeiro exemplo, declaramos uma função chamada &#8220;imprimir&#8221; que espera como argumento uma outra função. Ela executa esta outra função, pega o seu retorno e passa ele como argumento de &#8220;alert&#8221;. </p>
<p>É importante perceber que na linha 10 &#8220;gerador&#8221; é passado como argumento sem os parênteses &#8220;()&#8221; no final. Ou seja, ela não está sendo invocada, somente passada. A execução da função ocorre na linha 2. Uma variação do nosso exemplo:</p>
<p><span class="jsrun-exemplo-2 jsrun-button"> </span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">function</span> imprimir<span style="color: #ffffff;">&#40;</span>fn<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: #fbde2d; font-weight: bold;">var</span> texto <span style="color: #ffffff;">=</span> fn<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'por'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
    <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>texto<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span>
&nbsp;
<span style="color: #fbde2d; font-weight: bold;">function</span> gerador<span style="color: #ffffff;">&#40;</span>lingua<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: #fbde2d; font-weight: bold;">if</span> <span style="color: #ffffff;">&#40;</span>lingua <span style="color: #ffffff;">===</span> <span style="color: #61ce3c;">'por'</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
        <span style="color: #fbde2d; font-weight: bold;">return</span> <span style="color: #61ce3c;">'Sou um texto!'</span><span style="color: #ffffff;">;</span>
    <span style="color: #ffffff;">&#125;</span>
    <span style="color: #fbde2d; font-weight: bold;">return</span> <span style="color: #61ce3c;">'I´m a text!'</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span>
&nbsp;
imprimir<span style="color: #ffffff;">&#40;</span>gerador<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Agora &#8220;gerador&#8221; espera um parâmetro &#8220;lingua&#8221;. Este parâmetro é passado por &#8220;imprimir&#8221; no ato da execução, linha 2.</p>
<h3>Funções anônimas</h3>
<p>O nome pode parecer estranho mas o conceito é bem simples: funções anônimas são funções que não tem nome:</p>
<p><span class="jsrun-exemplo-3 jsrun-button"> </span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">function</span> imprimir<span style="color: #ffffff;">&#40;</span>fn<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: #fbde2d; font-weight: bold;">var</span> texto <span style="color: #ffffff;">=</span> fn<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'por'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
    <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>texto<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span>
&nbsp;
imprimir<span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span>lingua<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: #fbde2d; font-weight: bold;">if</span> <span style="color: #ffffff;">&#40;</span>lingua <span style="color: #ffffff;">===</span> <span style="color: #61ce3c;">'por'</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
        <span style="color: #fbde2d; font-weight: bold;">return</span> <span style="color: #61ce3c;">'Sou um texto!'</span><span style="color: #ffffff;">;</span>
    <span style="color: #ffffff;">&#125;</span>
    <span style="color: #fbde2d; font-weight: bold;">return</span> <span style="color: #61ce3c;">'I´m a text!'</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>&#8220;Imprimir&#8221; continua sendo exatamente igual. Aguarda uma função como parâmetro. A diferença é que, ao invocarmos &#8220;imprimir&#8221;, declaramos uma função anônima ao mesmo tempo. Como ela não tem nome, não existe a possibilidade dela ser executada por uma outra função ou em outro momento do código. Somente &#8220;imprimir&#8221; a contém e pode executá-la.</p>
<h3>E pra quê serve isso?</h3>
<p>Funções como argumentos e funções anônimas são amplamente utilizadas como &#8220;callbacks&#8221;. Se você atrela um evento de click a um botão, algo deve acontecer quando este botão for clicado. Este &#8220;algo&#8221; é uma função. Ou então uma requisição Ajax. Vamos supor que temos uma requisição que busca se um determinado email já foi ou não cadastrado em um banco de dados. Quando a requisição finalmente termina, uma resposta é enviada ao nosso programa. Esta resposta é normalmente passada como argumento de uma função &#8220;callback&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2010/04/03/funcoes-como-argumentos-e-funcoes-anonimas/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Funções: o básico</title>
		<link>http://javascript.singuska.com/2009/12/21/funcoes-o-basico/</link>
		<comments>http://javascript.singuska.com/2009/12/21/funcoes-o-basico/#comments</comments>
		<pubDate>Tue, 22 Dec 2009 00:50:30 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Básico]]></category>
		<category><![CDATA[funções]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=41</guid>
		<description><![CDATA[Função é uma porção de código de um programa maior que desempenha uma tarefa específica e é relativamente independente do resto do código. Geralmente uma função tem um nome, recebe argumentos, realiza sua tarefa e finalmente retorna um resultado. 1 2 3 4 // exemplo-1 function a&#40;&#41; &#123; alert&#40;'Olá, sou a função.'&#41;; &#125; O fragmento [...]]]></description>
			<content:encoded><![CDATA[<p>Função é uma porção de código de um programa maior que desempenha uma tarefa específica e é relativamente independente do resto do código. Geralmente uma função tem um nome, recebe argumentos, realiza sua tarefa e finalmente retorna um resultado.</p>
<p><span class="jsrun-exemplo-1"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #bfbfbf; font-style: italic;">// exemplo-1</span>
<span style="color: #fbde2d; font-weight: bold;">function</span> a<span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'Olá, sou a função.'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span></pre></td></tr></table></div>

<p>O fragmento de código acima não realiza nenhuma tarefa. A função de nome <em>a</em> foi apenas <em>declarada</em> e está pronta para ser utilizada. Para que algo aconteca precisamos <em>invocar</em>, chamar a função. Isso por ser feito da seguinte maneira:</p>
<p><span class="jsrun-exemplo-1 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>5
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">a<span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Se adicionarmos a linha acima ao nosso código, um alerta aparecerá no navegador exibindo a mensagem &#8220;Olá, sou uma função&#8221;.</p>
<h3>E para que servem as funções? (argumentos)</h3>
<p>Quando um programa de alguma complexidade maior é desenvolvido, problemas recorrentes tornam-se evidentes. Tarefas repetitivas que podem ser identificadas, isoladas e codificadas em funções. Vamos alterar nosso código para o seguinte:</p>
<p><span class="jsrun-exemplo-2"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #bfbfbf; font-style: italic;">// exemplo-2</span>
<span style="color: #fbde2d; font-weight: bold;">function</span> a<span style="color: #ffffff;">&#40;</span>texto<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>texto<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span></pre></td></tr></table></div>

<p>A função <em>a</em> agora recebe o que é chamado de argumento. Este argumento tem um nome: <em>texto</em>. Novamente, nosso código é inútil enquando não for acionado.</p>
<p><span class="jsrun-exemplo-2 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>5
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">a<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'Sou um exemplo de texto.'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Mais uma vez um alerta pipoca na tela no navegador, desta vez com a mensagem &#8220;Sou um exemplo de texto&#8221;. Perceba como isso é importante. Nossa função agora comporta-se de maneira diferente dependendo do argumento que lhe é passado. Nessa altura nossa função não é nem um pouco útil. Ela nada mais é do que uma espécie de &#8220;atalho&#8221; para um outra função: alert. Ambas desempenham a mesma tarefa. Vamos então modificar a função para que ela realize algo um pouco diferente:</p>
<p><span class="jsrun-exemplo-3 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #bfbfbf; font-style: italic;">// exemplo-3</span>
<span style="color: #fbde2d; font-weight: bold;">function</span> a<span style="color: #ffffff;">&#40;</span>texto<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'O argumento passado foi: '</span> <span style="color: #ffffff;">+</span> texto<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span>
a<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'um exemplo de texto.'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>O resultado do exemplo 3 é: <em>O argumento passado foi um exemplo de texto</em>. A função continua utilizando alert, mas agora ela realiza uma tarefa um pouco mais complexa.</p>
<p>É possível afirmar então que funções são pedaços de código que desempenham tarefas muito parecidas, mas de maneira um pouco diferente dependendo do jeito que as acionamos. O que faz a função se comportar de forma diferente é o <em>contexto</em>. O contexto, nos exemplos acima, é dado pelo argumento que é pasado no momento da invocação da função.</p>
<h3>Sobre os retornos de funções</h3>
<p>Como já foi dito, funções podem ter nomes, receber argumentos, desempenhar uma tarefa e retornar algum resultado.</p>
<p><span class="jsrun-exemplo-4 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #bfbfbf; font-style: italic;">// exemplo-4</span>
<span style="color: #fbde2d; font-weight: bold;">function</span> a<span style="color: #ffffff;">&#40;</span>texto<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: #fbde2d; font-weight: bold;">return</span> <span style="color: #61ce3c;">'O argumento passado foi: '</span> <span style="color: #ffffff;">+</span> texto<span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span>
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>a<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'um exemplo de texto.'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Este exemplo se comporta de maneira igual ao anterior. Alert é chamada e recebe como argumento o retorno da função &#8220;a&#8221;. Como &#8220;a&#8221; está dentro de &#8220;alert&#8221; ela é executada primeiro. Desta forma, quando alert é chamada já temos o resultado de &#8220;a&#8221; disponível, que é passado como argumento para &#8220;alert&#8221;. </p>
<p>É possível pensar na sequência de operações da seguinte forma: &#8220;alert&#8221; é invocada, invoca &#8220;a&#8221;, que retorna um resultado, que é passado como argumento o argumento de &#8220;alert&#8221;.</p>
<p>É muito importante entender que o retorno não somente retorna um resultado. Ele também pára a execução da função.</p>
<p><span class="jsrun-exemplo-5 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #bfbfbf; font-style: italic;">// exemplo-5</span>
<span style="color: #fbde2d; font-weight: bold;">function</span> a<span style="color: #ffffff;">&#40;</span>texto<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: #fbde2d; font-weight: bold;">return</span><span style="color: #ffffff;">;</span>
    <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'O argumento passado foi: '</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span>
a<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'um exemplo de texto.'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Neste caso <em>nada acontece no navegador</em>. Na linha 3 nossa função, invocada na linha 5, não retorna nenhum valor. Ou seja, ela para de ser executada. Esta função é inútil porque ele não desempenha nenhuma tarefa. Em nenhuma circunstância chegaremos na linha 4. É um exemplo besta mas serve para ilustrar que retornos podem ou não retornar um valor, mas sempre interrompem a execução da função.</p>
]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2009/12/21/funcoes-o-basico/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

