<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>pepiino.cz</title>
	
	<link>http://zapisnik.pepiino.cz</link>
	<description>console.log("o Javascriptu, webu a vůbec");</description>
	<lastBuildDate>Tue, 07 Dec 2010 14:18:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/pepiinocz" /><feedburner:info uri="pepiinocz" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Co byste měli vědět o JavaScriptu [5]: with je zlý čaroděj</title>
		<link>http://feedproxy.google.com/~r/pepiinocz/~3/TknOGeBrHNI/</link>
		<comments>http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-5-with-je-zly-carodej/#comments</comments>
		<pubDate>Thu, 02 Dec 2010 11:15:53 +0000</pubDate>
		<dc:creator>Josef Adamčík</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Co byste měli vědět o JavaScriptu]]></category>

		<guid isPermaLink="false">http://zapisnik.pepiino.cz/?p=581</guid>
		<description><![CDATA[
<p>Vítejte u dalšího dílu série článku „Co byste měli vědět
o JavaScriptu“. K pátemu dílu jsem seriálu nadělil vlastní štítek a
také vlastní RSS. Dnes si povíme o konstrukci with a rovnou prozradím, že
učiníte lépe, nebudete-li ji používat. Konstrukce with Konstrukce with je
určena ke zkrácení zápisu přístupu k vlastnostem objektů. var osoba = {
jmeno: „franta“, prijmeni: „frantiskovec“, […]</p>
]]></description>
			<content:encoded><![CDATA[
<p>Vítejte u dalšího dílu série článku „Co byste měli vědět
o JavaScriptu“. K pátemu dílu jsem seriálu <a
href="http://zapisnik.pepiino.cz/tagy/co-byste-meli-vedet-o-javascriptu/">nadělil
vlastní štítek</a> a také <a
href="http://zapisnik.pepiino.cz/tagy/co-byste-meli-vedet-o-javascriptu/feed/">vlastní
RSS</a>.</p>

<p>Dnes si povíme o konstrukci <code>with</code> a rovnou prozradím, že
učiníte lépe, nebudete-li ji používat.</p>

<h2>Konstrukce with</h2>

<p>Konstrukce <code>with</code> je určena ke zkrácení zápisu přístupu
k vlastnostem objektů.</p>

<pre
class="brush: jscript; pad-line-numbers: false;">
var osoba = {
    jmeno: "franta",
    prijmeni: "frantiskovec",
    velikostBot: 42
};

//v rámci bloku with mohu pracovat s vlastnostmi
//objektu 'osoba' podobně jako s lokálními proměnnými
with (osoba) {
   //vypíše "franta"
   console.log(jmeno);
   //vypíše "frantiskovec"
   console.log(prijmeni);
   //vypíše odpověď na základní otázku života, vesmíru a vůbec
   console.log(velikostBot);
}

</pre>

<p><a href="http://jsfiddle.net/pepiino/7g6QV/">Zkuste si</a>. Vypadá to
užitečně, že? Ale třpyt neimplikuje zlato, jak již zajisté víme.</p>

<h2>With nepřehledný a zrádný</h2>

<p>Představte si, že při čtení JavaScriptového kódu narazíte na
následující pasáž:</p>

<pre
class="brush: jscript; pad-line-numbers: false;">
with (neco) {
    olala = bubu;
}
</pre>

<p>Poznáte, co uvedený kód dělá? Stát se mohou 4 různé věci,
v závislosti na tom, zda jsou <code>olala</code> a <code>bubu</code>
vlastnostmi objektu <code>neco</code>.</p>

<pre
class="brush: jscript; pad-line-numbers: false;">
//olala je vlastností neco, bubu nikoli
neco.olala = bubu;
//bubu je vlastností neco, olala nikoli
olala = neco.bubu;
//bubu i olala jsou vlastnostmi neco
neco.olala = neco.bubu;
//bubu i olala nejsou vlastnostmi neco
olala = bubu;
</pre>

<p>Vzhledem k dynamické povaze JavaScriptu nemůžete nijak snadno zaručit,
že objekt bude mít vámi předpokládané vlastnosti. A pokud je nemá,
může <a
href="http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-1-promenna-a-globalni-obor-platnosti/">zapsaná
hodnota snadno skončit v globálním oboru platnosti</a>, což lehce způsobí
obtížně odladitelné chyby. Také pokud čtete cízí (nebo vlastní, ale
starý) kód a předpoklad existence vlastností není vyjádřen jinak (třeba
v komentáři), budete mít nejspíš problém pochopit autorův záměr.</p>

<h2>Žijte bez with</h2>

<p><code>With</code> do JavaScriptu bezpochyby nepatří, proto byl ve
striktním módu ECMAScriptu 5 vyřazen. <a
href="http://stackoverflow.com/questions/61552/are-there-legitimate-uses-for-javascripts-with-statement">Ačkoliv
lze dlouze diskutovat o zajímavých použitích této konstrukce</a>,
usnadníte si život, pokud se bez něj obejdete i vy.</p>

<!-- by Texy2! --><img src="http://feeds.feedburner.com/~r/pepiinocz/~4/TknOGeBrHNI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-5-with-je-zly-carodej/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-5-with-je-zly-carodej/</feedburner:origLink></item>
		<item>
		<title>Co byste měli vědět o JavaScriptu [4]: deklarace funkce a funkce jako výraz</title>
		<link>http://feedproxy.google.com/~r/pepiinocz/~3/1J5yoTOq0D0/</link>
		<comments>http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-4-deklarace-funkce-a-funkce-jako-vyraz/#comments</comments>
		<pubDate>Sun, 28 Nov 2010 13:20:42 +0000</pubDate>
		<dc:creator>Josef Adamčík</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Co byste měli vědět o JavaScriptu]]></category>

		<guid isPermaLink="false">http://zapisnik.pepiino.cz/?p=447</guid>
		<description><![CDATA[
<p>Vítejte u dalšího dílu mého seriálu o méně známých zákoutích
JavaScriptu. Pravidelný čtenář si zajisté všiml, že první tři díly
měly něco společného. Všechny se nějak dotýkaly platnosti proměnných
v JavaScriptu. Dnešní článek nebude výjimkou a bude trochu delší
i náročnější, takže doporučuji lehce si osvěžit paměť prolétnutím
předcházejících témat. V prvním díle jsem psal o deklaraci lokálních
proměnných, klíčovém slovu var […]</p>
]]></description>
			<content:encoded><![CDATA[
<p>Vítejte u dalšího dílu mého <a
href="http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-0-uvod/">seriálu
o méně známých zákoutích JavaScriptu</a>. Pravidelný čtenář si
zajisté všiml, že první tři díly měly něco společného. Všechny se
nějak dotýkaly platnosti proměnných v JavaScriptu. Dnešní článek nebude
výjimkou a bude trochu delší i náročnější, takže doporučuji lehce si
osvěžit paměť prolétnutím předcházejících témat.</p>

<p>V prvním díle jsem psal o <a
href="http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-1-promenna-a-globalni-obor-platnosti/">deklaraci
lokálních proměnných, klíčovém slovu <code>var</code> a globálním
‚scope‘</a>, navázal jsem krátkou zmínkou o tom, <a
href="http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-2-javascript-nema-block-level-scope/">že
v JavaScriptu jsou lokální proměnné platné vždy v rámci celé
funkce</a> a nakonec jsem se minulý týden rozepsal o méně známé
vlastnosti: <a
href="http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-3-variable-hoisting/">variable
hoisting</a>.</p>
<span id="more-447"></span>
<h2>Funkce jako hodnota</h2>

<p>Asi jednou z nejhezčích vlastností JavaScriptu je, že se funkce chovají
naprosto stejně jako jakýkoliv jiný referenční datový typ. Můžete je
ukládat do proměnných, předávat jako parametr jiným funkcím a dokonce
i vracet jako návratovou hodnotu. (V angličtině se používá termín
<em>first class object</em>, který ale nemá s objekty ani třídami z OOP
nic společného).</p>

<p>Předpokládám, že každý čtenář dokáže bezpochyby funkci
deklarovat:</p>

<pre
class="brush: jscript; pad-line-numbers: false;">
//třeba takto
function ahoj() {
   //....
}

//nebo takto
var ahoj = function() {
   //...
}


//i takto
var ahoj = function ahoj() {
   //...
}

//všechny tři varianty voláme stejně, oslovujeme dle nálady
ahoj();
</pre>

<p>Ve všech třech příkladech vznikne v aktuálním kontextu (oboru
platnosti) proměnná s názvem <code>ahoj</code> odkazující na naši novou
funkci.</p>

<h2>Deklarace versus výraz</h2>

<p>Abychom neměli život příliš jednoduchý, je mezi prvním výše
uvedeným příkladem a jeho následovníky podstatný rozdíl. Z hlediska
syntaxe JavaScriptu existují dvě konstrukce, které lze použít
k vytvoření funkce: <em>function declaration</em> (deklarace) a <em>function
expression</em> (výraz).</p>

<p>Zatímco deklarace má pouze jednu formu:</p>

<pre
class="brush: jscript; pad-line-numbers: false;">
//deklarace
function ahoj(parametr, dalsiparametr) {
   //....
}
</pre>

<p>Výraz může nabývat rozličných tvarů, chutí i vůní:</p>

<pre
class="brush: jscript; pad-line-numbers: false;">
//anonymní funkce přiřazená do proměnné
var ahoj = function(parametr, dalsiparametr) {
   //....
}
//pojmenovaná funkce přiřazená do proměnné
var ahoj = function nazdar(parametr, dalsiparametr) {
   //....
}
</pre>

<p>Jak interpret JavaScriptu (nebo třeba programátor) pozná, zda jde
v konkrétním případě o deklaraci či výraz? Je potřeba mít na paměti,
že název funkce je u deklarace povinný a u výrazu volitelný, takže jeho
nepřítomnost nelze považovat za rozhodující. Rozhodující pravidlo by
mohlo být formulováno třeba takto: je-li v daném kontextu očekávána
hodnota (přiřazení do proměnné, návratová hodnota, ale i další) bude
konstrukce zpracována jako výraz, jinak jako deklarace. Těžko
představitelné? Lze použít i lehce zjednodušující pomůcku: začíná-li
příkaz (<em>statement</em>) klíčovým slovem function jde o deklaraci,
jinak o výraz.</p>

<p>Srovnejte:</p>

<pre
class="brush: jscript; pad-line-numbers: false;">
function ahoj() {...} //vyhodnocena jako deklarace

(function ahoj() {...}) //vyhodnocena jako výraz

function() {...} //je vyhodnocována jako deklarace, pak je ale očekáváno povinné jméno =&gt; dojde k syntaktické chybě

return function() {...} //zde již je vyhodnocována jako výraz

new function() {...}; // operátor new aplikovaný na anonymní funkci, která je opět vyhodnocena jako výraz. Funkce poslouží jako konstruktor.

</pre>

<h2>Deklarace funkce se vznášejí také, ale jinak</h2>

<p><a
href="http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-3-variable-hoisting/">Podobně
jako u deklarací proměnných</a> dochází k „vznášení“
identifikátorů funkcí. Pokud stvoříte funkci pomocí výrazu, aplikuje se
<em>variable hoisting</em> podle totožného principu jako u ostatních
proměnných (což nás nijak nepřekvapí). Použijete-li ale deklaraci,
probublá na začátek nadřazeného kontextu nejen identifikátor, ale i tělo
(nebo chcete-li hodnota) funkce.</p>

<p>Takže následující ukázka:</p>

<pre
class="brush: jscript; pad-line-numbers: false;">
function tulipan() {
    //... kód
    var ahoj = function(parametr, dalsiparametr) {
        console.log("ahoj");
    }
    //... kód
    function nazdar() {
        console.log("nazdar");
    }

}
</pre>

<p>Je interpretována nějak takto:</p>

<pre
class="brush: jscript; pad-line-numbers: false;">
function tulipan() {
    var ahoj, nazdar = function nazdar() {
        console.log("nazdar");
    };

    //... kód
    ahoj = function(parametr, dalsiparametr) {
        console.log("ahoj");
    }
    //... kód
}
</pre>

<p>Můžete si <a href="http://jsfiddle.net/pepiino/UDfqT/">zkusit
následující příklad</a>:</p>

<pre
class="brush: jscript; pad-line-numbers: false;">
function tulipan() {
    console.log(typeof ahoj); //=&gt; undefined
    console.log(typeof nazdar); //=&gt; function;
    //ahoj(); //odkomentujte a dojde k chybě
    nazdar(); //=&gt; "nazdar"

    var ahoj = function(parametr, dalsiparametr) {
        console.log("ahoj");
    }
    console.log(typeof ahoj); //=&gt; "function"
    ahoj(); //=&gt; "ahoj"

    function nazdar() {
        console.log("nazdar");
    }
}

tulipan();
</pre>

<h2>Trable s bloky</h2>

<p>V souvislosti s deklaracemi funkcí musím zmínit jednu z nekompatibilit
mezi současnými interprety JavaScriptu. Z hlediska specifikace totiž nesmí
být deklarace funkce zanořena v blocích podmínek, cyklů a podobně.
Všechny implementace JavaScriptu ale takovou konstrukci akceptují a chovají
se různě.</p>

<p><a href="http://jsfiddle.net/pepiino/gkrWp/">Vyzkoušejte si následující
ukázku</a> v různých prohlížečích (se zapnutou konzolí) a uvidíte, že
některé vypíšou „nazdar“, jiné „ahoj“.</p>

<pre
class="brush: jscript; pad-line-numbers: false;">
function tulipan() {

   if (true) {
       function ahoj() {
           console.log("ahoj");
       }
   } else {
       function ahoj() {
           console.log("nazdar");
       }
   }


   ahoj();
   //Chrome a IE vypíšou 'nazdar'
   //Firefox vypíše 'ahoj'
}

tulipan();
</pre>

<h2>Používat deklarace?</h2>

<p>Nejsilnější výhodou deklarací je možnost volat funkci dříve, než je
v kódu uvedena (u výrazu sice proměnná díky <em>hoistingu</em> existuje,
ale má hodnotu <code>undefined</code>). Jako další argument pro používání
deklarací se často uvádí lepší ladění v debuggerech – díky tomu,
že funkce jsou pojmenované. Pozorný čtenář si ale v příkladech zajisté
všiml pojmenované funkce i ve výrazech.</p>

<pre
class="brush: jscript; pad-line-numbers: false;">
//pojmenovaná funkce přirazená do proměnné
var ahoj = function nazdar(parametr, dalsiparametr) {
   //....
}
</pre>

<p>Tato konstrukce problém řeší, leč bohužel nefuguje úplně korektně
v Internet Exploreru (pro podrobnější popis viz na konci odkázaný
článek).</p>

<p>Při vší skromnosti si myslím, že deklarace funkce je v JavaScriptu
omylem. Respektive záměrně, ale jen aby usnadnila tvorbu kódu
programátorům přicházejícím od jiných jazyků, kde jsou na podobnou
konstrukci zvyklí. Poměrně se vymyká základní myšlence práce s funkcemi
v JavaScriptu a působí víc zmatení, než užitku.</p>

<p>Nestačí-li vám můj stručný popis problematiky, doporučuji zevrubné a
asi nejlepší zpracování tématu od Juriye ‚kangax‘ Zaytseva: <a
href="http://kangax.github.com/nfe/">Named function expressions
demystified</a>.</p>

<!-- by Texy2! --><img src="http://feeds.feedburner.com/~r/pepiinocz/~4/1J5yoTOq0D0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-4-deklarace-funkce-a-funkce-jako-vyraz/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-4-deklarace-funkce-a-funkce-jako-vyraz/</feedburner:origLink></item>
		<item>
		<title>Další porce zajímavostí kolem JavaScriptu a webu</title>
		<link>http://feedproxy.google.com/~r/pepiinocz/~3/LcVbQeBrBGk/</link>
		<comments>http://zapisnik.pepiino.cz/dalsi-porce-zajimavosti-kolem-javascriptu-a-webu/#comments</comments>
		<pubDate>Thu, 25 Nov 2010 10:30:08 +0000</pubDate>
		<dc:creator>Josef Adamčík</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[odkazy]]></category>

		<guid isPermaLink="false">http://zapisnik.pepiino.cz/?p=419</guid>
		<description><![CDATA[
<p>JavaScript Weekly aneb novinky ze světa Javascriptu každý týden do
vašeho emailu. Stojí za odběr, opravdu pěkné odkazy. Essential JavaScript
And jQuery Design Patterns e-book o návrhových vzorech v JS zdarma ke
stažení. Rozhodně doporučuji alespoň prolistovat. Pragmatic Guide to
JavaScript nadějně vypadající kniha o Javascriptu (zaznamenal jsem dobré
reference). E-book za 13 dolarů a tento pátek ji lze […]</p>
]]></description>
			<content:encoded><![CDATA[
<p><img
src="http://zapisnik.pepiino.cz/wp-content/upload/2010/10/calendar180.jpg"
alt="Ilustrace" class="left" /> <a
href="http://javascriptweekly.com/">JavaScript Weekly</a> aneb novinky ze světa
Javascriptu každý týden do vašeho emailu. Stojí za odběr, opravdu pěkné
odkazy.</p>

<p><a href="http://addyosmani.com/blog/essentialjsdesignpatterns/">Essential
JavaScript And jQuery Design Patterns</a> e-book o návrhových vzorech v JS
zdarma ke stažení. Rozhodně doporučuji alespoň prolistovat.</p>

<p><a
href="http://www.pragprog.com/titles/pg_js/pragmatic-guide-to-javascript">Pragmatic
Guide to JavaScript</a> nadějně vypadající kniha o Javascriptu (zaznamenal
jsem dobré reference). E-book za 13 dolarů a tento pátek ji <a
href="http://media.pragprog.com/newsletters/2010-11-24.html">lze koupit se 40%
slevou</a> (sleva by se měla vztahovat na celý sortiment <a
href="http://pragprog.com">http://pragprog.com</a>)</p>

<p><a
href="http://www.learnboost.com/introducing-node-canvas-server-side-html5-canvas-api/">HTML5
Canvas na serveru? Ale jistě!</a></p>

<p><a href="http://steamdev.com/snippet/">Snippet</a> jQuery plugin pro
obarvení zdrojových kódů. Interně používá <a
href="http://shjs.sourceforge.net/">SHJS</a>. Vypadá velice hezky.</p>

<p><a href="http://akdubya.github.com/dustjs/">Dust.js</a> je sympatický
šablonovací engine pro JavaScript (lze použít v prohlížeči, ale třeba
i na serveru).</p>

<p><a href="http://www.mathjax.org/">Mathjax</a> je moc hezké knihovna pro
zobrazení matematických výrazů (Latex, MathML) na webu. Nic originálního,
ale řešení působí lépe než podobné nástroje, se kterými jsem se
v minulosti potkal.</p>

<!-- by Texy2! --><img src="http://feeds.feedburner.com/~r/pepiinocz/~4/LcVbQeBrBGk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://zapisnik.pepiino.cz/dalsi-porce-zajimavosti-kolem-javascriptu-a-webu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://zapisnik.pepiino.cz/dalsi-porce-zajimavosti-kolem-javascriptu-a-webu/</feedburner:origLink></item>
		<item>
		<title>Co byste měli vědět o JavaScriptu [3]: variable hoisting</title>
		<link>http://feedproxy.google.com/~r/pepiinocz/~3/POARUgLCWqA/</link>
		<comments>http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-3-variable-hoisting/#comments</comments>
		<pubDate>Sun, 21 Nov 2010 19:42:31 +0000</pubDate>
		<dc:creator>Josef Adamčík</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Co byste měli vědět o JavaScriptu]]></category>

		<guid isPermaLink="false">http://zapisnik.pepiino.cz/?p=428</guid>
		<description><![CDATA[
<p>Minule jsem krátce popsal, že v JavaScriptu jsou lokální proměnné
platné vždy na úrovni celé funkce, nikoli v bloku. S tím silně souvisí
vlastnost, která je v angličtině označována variable hoisting. Rozumný
český překlad mě nenapadá (a žádný oficiální neznám), ale sousloví
by se dalo kostrbatě přeložit jako „zdvihání proměnných“. Zdvihám,
zdviháš, zdviháme Princip je jednoduchý: interpret javascriptu
při […]</p>
]]></description>
			<content:encoded><![CDATA[
<p><a
href="http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-2-javascript-nema-block-level-scope">Minule
jsem krátce popsal</a>, že v JavaScriptu jsou lokální proměnné platné
vždy na úrovni celé funkce, nikoli v bloku. S tím silně souvisí
vlastnost, která je v angličtině označována <em>variable hoisting</em>.
Rozumný český překlad mě nenapadá (a žádný oficiální neznám), ale
sousloví by se dalo kostrbatě přeložit jako „zdvihání
proměnných“.</p>

<h2>Zdvihám, zdviháš, zdviháme</h2>

<p>Princip je jednoduchý: interpret javascriptu při zpracování těla funkce
nalezne všechny identifikátory <a
href="http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-1-promenna-a-globalni-obor-platnosti/">lokálních
proměnných deklarovaných pomocí klíčového slova <code>var</code></a>,
a „vyzdvihne“ je na začátek těla funkce (před jakýkoliv příkaz).</p>

<p>Takže následující kód:</p>

<pre
class="brush: jscript; pad-line-numbers: false;">
function tulipan() {
    if (test()) {
        var promenna = 10;
        fanfan();
    }
    var hodnota = "malá";
    return "vysledek";
    var cislo = 1;
}
</pre>

<p>Je interpretován jako:</p>

<pre
class="brush: jscript; pad-line-numbers: false;">
function tulipan() {
    var promenna, hodnota, cislo;
    if (test()) {
        promenna = 10;
        fanfan();
    }
    hodnota = "malá";
    return "vysledek";
    cislo = 1;
}
</pre>

<h2>Proč je to důležité?</h2>

<p>Nuže podívejme se na několik ukázek kódu, kde neznalost tohoto principu
způsobí vývojaří přinejmenším zmatení.</p>

<p>Přístup ke globální proměnné (či proměnné z nadřazených oborů
platnosti):</p>

<pre
class="brush: jscript; pad-line-numbers: false;">
var hodnota = 20;
function delej() {
    console.log(hodnota);
    var hodnota = 6;
    console.log(hodnota);
}
delej();
</pre>

<p><a href="http://www.jsfiddle.net/pepiino/rPsbh/">Můžete si vyzkoušet</a>,
že první volání <code>console.log</code> vypíše <code>undefined</code> a
ne <code>20</code>, jak by mohl očekávat neznalec.</p>

<p>Podobně v následující ukázce bude hodnota proměnné <code>baf</code>
uvnitr funcke <code>tulipan</code> vždy vyhodnocena jako „vychozi“.</p>

<pre
class="brush: jscript; pad-line-numbers: false;">
var baf = 'fanfan';

function tulipan() {
  var baf = baf || 'vychozi';
  console.log(baf);
};

tulipan();
</pre>

<p><a href="http://www.jsfiddle.net/pepiino/QENXC/">Vyzkoušejte si.</a></p>

<h2>Doporučení na závěr</h2>

<p>Běžným doporučením, na které můžete ohledně psaní kódu
v JavaScriptu narazit, je právě používání jediného klíčového slova
<code>var</code> hned na začátku funkce, kde uvedete všechny lokální
proměnné. Pokud k JavaScriptu přijdete z jiného jazyka (jako třeba já
z Javy), může to být zarážející. Důvodem je ale právě <em>variable
hoisting</em>. Dodržování této rady vám může ušetřit pár
nepříjemných záseků.</p>

<p>Příště navážu opět souvisejícím tématem, povíme si něco
o deklaracích funkcí.</p>

<!-- by Texy2! --><img src="http://feeds.feedburner.com/~r/pepiinocz/~4/POARUgLCWqA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-3-variable-hoisting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-3-variable-hoisting/</feedburner:origLink></item>
		<item>
		<title>Cheš být lepším programátorem? Neboj se vynalézat kolo znova a znova!</title>
		<link>http://feedproxy.google.com/~r/pepiinocz/~3/E447SoRL_n0/</link>
		<comments>http://zapisnik.pepiino.cz/ches-byt-lepsim-programatorem-neboj-se-vynalezat-kolo-znova-a-znova/#comments</comments>
		<pubDate>Mon, 15 Nov 2010 09:00:51 +0000</pubDate>
		<dc:creator>Josef Adamčík</dc:creator>
				<category><![CDATA[Nezařazeno]]></category>
		<category><![CDATA[krátce]]></category>
		<category><![CDATA[programování]]></category>

		<guid isPermaLink="false">http://zapisnik.pepiino.cz/?p=113</guid>
		<description><![CDATA[
<p>„Nesnaž se znova vynalézat kolo, použij hotové řešení.“ Jestli se
alespoň trochu motáte kolem vývoje softwaru, určitě jste již tuto mantru
slyšeli nespočetněkrát. Většina problémů, na které při vývoji
aplikace narazíme, je již dávno vyřešena a hotovou knihovnu (zabalenou
v pěkné černé krabičce), stačí většinou jen vybrat a použít. Nemohu
popřít že to má většinou smysl, […]</p>
]]></description>
			<content:encoded><![CDATA[
<p><img src="http://zapisnik.pepiino.cz/wp-content/upload/2010/11/wheels240.jpg"
alt="" class="left" /> <em>„Nesnaž se znova vynalézat kolo, použij hotové
řešení.“</em> Jestli se alespoň trochu motáte kolem vývoje softwaru,
určitě jste již tuto mantru slyšeli nespočetněkrát.</p>

<p>Většina problémů, na které při vývoji aplikace narazíme, je již
dávno vyřešena a hotovou knihovnu (zabalenou v pěkné černé krabičce),
stačí většinou jen vybrat a použít. Nemohu popřít že to má většinou
smysl, obzvlášť jde-li o obchod. Díky hotovým řešením můžeme vyrobit
a dodat produkt rychleji, levněji, což bezpochyby není špatně.</p>

<p>V extrémním případě se ale z programátora stává cvičená opička.
Jeho denním chlebem je pak výběr, studium a lepení již hotových
frameworků, knihoven a dalších udělátek.</p>

<p>Programujete-li ve svém volném čase, nebojte se dělat věci, které již
udělali jiní. I když je uděláte hůř (či úplně špatně), máte
alespoň příležitost poučit se z vlastních chyb. Z opravdových
programátorských chyb, které učiníte při řešení jiných úloh, než je
výběr jednoho z <em>n</em> frameworků. A pokud ve svém volném čase
neprogramujete, měli byste začít.</p>

<p style="font-size:80%">(<a
href="http://www.flickr.com/photos/chrisjfry/309701186/">obrázek</a> pochází
od <a href="http://www.flickr.com/photos/chrisjfry/">chrisjfry</a>, licence <a
href="http://creativecommons.org/licenses/by-nc-nd/2.0/deed.en">cac
by-nc-nd</a>)</p>

<!-- by Texy2! --><img src="http://feeds.feedburner.com/~r/pepiinocz/~4/E447SoRL_n0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://zapisnik.pepiino.cz/ches-byt-lepsim-programatorem-neboj-se-vynalezat-kolo-znova-a-znova/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://zapisnik.pepiino.cz/ches-byt-lepsim-programatorem-neboj-se-vynalezat-kolo-znova-a-znova/</feedburner:origLink></item>
		<item>
		<title>Co byste měli vědět o JavaScriptu [2]: JavaScript nemá „block-level scope“</title>
		<link>http://feedproxy.google.com/~r/pepiinocz/~3/lbCUxibTu0c/</link>
		<comments>http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-2-javascript-nema-block-level-scope/#comments</comments>
		<pubDate>Fri, 12 Nov 2010 09:00:01 +0000</pubDate>
		<dc:creator>Josef Adamčík</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Co byste měli vědět o JavaScriptu]]></category>

		<guid isPermaLink="false">http://zapisnik.pepiino.cz/?p=375</guid>
		<description><![CDATA[
<p>V dnešním velice krátkém dílu se zmínim o drobnosti, kterou by měli
mít na paměti hlavně programátoři přicházející z jazyků jako je Java
či C#. Vývojáře znalé třeba PHP ale zajisté nijak nezaskočí, ti zde
budou jako doma. V JavaScriptu (podobně jako v PHP) je totiž lokální
proměnná platná vždy v rámci celé funkce. Oproti tomu ve zmiňované
Javě je platnost […]</p>
]]></description>
			<content:encoded><![CDATA[
<p>V dnešním velice krátkém <a
href="http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-0-uvod/">dílu</a>
se zmínim o drobnosti, kterou by měli mít na paměti hlavně programátoři
přicházející z jazyků jako je Java či C#. Vývojáře znalé třeba PHP
ale zajisté nijak nezaskočí, ti zde budou jako doma. V JavaScriptu (podobně
jako v PHP) je totiž <em>lokální proměnná platná vždy v rámci celé
funkce</em>.</p>

<p>Oproti tomu ve zmiňované Javě je platnost omezena na blok kódu.</p>

<pre
class="brush: java; pad-line-numbers: false;">
// Java
public void funkce() {
    int  i = 10;
    for (int i =0; i &lt; 15; i++) {
        System.out.println("Uvnitr bloku i: " + i);
    }
    System.out.println("Vne bloku i: " + i);

}
</pre>

<p>V uvedném kódu překryje proměnná <code>i</code> deklarovaná
v záhlaví cyklu vnější proměnnou <code>i</code>.</p>

<p>V Javascriptu ale následující zápis postrádá smysl:</p>

<pre
class="brush: jscript; pad-line-numbers: false;">
// JavaScript
function funkce() {
    var i = 10;

    for (var i = 0; i &lt; 6; i++) {
        //neco...
    }

    for (var i = 0; i &lt; 68; i++) {
        //neco jineho
    }

}
</pre>

<p>Proměnná <code>i</code> bude prostě jenom jedna, bez ohledu na počet <a
href="http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-1-promenna-a-globalni-obor-platnosti/">použití
klíčového slova <code>var</code></a>.</p>

<p>S oborem platnosti na úrovni funkce silně souvisí další zajímavá
vlastnost, nazývaná „variable hoisting“. Proberu ji příště.</p>
<img src="http://feeds.feedburner.com/~r/pepiinocz/~4/lbCUxibTu0c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-2-javascript-nema-block-level-scope/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-2-javascript-nema-block-level-scope/</feedburner:origLink></item>
		<item>
		<title>Co byste měli vědět o Javascriptu [1]: proměnná a globální obor platnosti</title>
		<link>http://feedproxy.google.com/~r/pepiinocz/~3/9xn0NGN_T0Y/</link>
		<comments>http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-1-promenna-a-globalni-obor-platnosti/#comments</comments>
		<pubDate>Tue, 09 Nov 2010 13:00:39 +0000</pubDate>
		<dc:creator>Josef Adamčík</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Co byste měli vědět o JavaScriptu]]></category>

		<guid isPermaLink="false">http://zapisnik.pepiino.cz/?p=295</guid>
		<description><![CDATA[
<p>V prvním díle miniseriálu zmíním jedno z nejznámějších špatných
míst Javascriptu. V anglicky psaných zdrojích bývá označován termínem
„implied global“. Jde o velice důležitou vlastnost jazyka, jejíž
znalost (a hlavně plné pochopení důsledků) vám může ušetřit mnoho
vytrhaných vlasů. K deklaraci proměnné v Javascriptu slouží klíčové
slovo var. Často se (a mylně) uvádí, že je jeho použití nepovinné. Ve
většině případů má […]</p>
]]></description>
			<content:encoded><![CDATA[
<p>V <a
href="http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-0-uvod/">prvním
díle miniseriálu</a> zmíním jedno z nejznámějších špatných míst
Javascriptu. V anglicky psaných zdrojích bývá označován termínem
„implied global“. Jde o velice důležitou vlastnost jazyka, jejíž
znalost (a hlavně plné pochopení důsledků) vám může ušetřit mnoho
vytrhaných vlasů.</p>
<span id="more-295"></span>
<p>K deklaraci proměnné v Javascriptu slouží klíčové slovo
<code>var</code>. Často se (a mylně) uvádí, že je jeho použití
nepovinné. Ve většině případů má ale deklarace proměnné bez použití
<code>var</code> jiný význam.</p>

<p>Vezměme si následující příklad:</p>

<pre
class="brush: jscript; pad-line-numbers: false;">
function test() {
    var promenna = 10;
    console.log(promenna); //predpokladam dostupnou konzoli - tedy firefox+firebug ci jakukoliv prohlizec s rozumnymi vyvojarskymi nastroji
}

test();
console.log(promenna); //reference error
</pre>

<p>Zde je korektně deklarována lokální proměnná. <a
href="http://jsfiddle.net/pepiino/5tu3n//">Vyzkoušejte si.</a>.</p>

<p>Pokud ale klíčové slovo <code>var</code> záměrně či omylem vynecháme,
Javascript deklaruje proměnnou v globálním oboru platnosti (alespoň
v následujícím příkladu).</p>

<pre
class="brush: jscript; pad-line-numbers: false;">
function test() {
    promenna = 10;
    console.log(promenna)
}

test();
console.log(promenna); //vypise 10

</pre>

<p><a href="http://jsfiddle.net/pepiino/Qcbje/">Vyzkoušejte si.</a>.</p>

<p>Tedy přesněji řečeno:</p>

<ul>
	<li>při zápisu do proměnné v javascriptu interpret zjistí, zda
	požadovaná proměnná existuje. Pokud není deklarována jako lokální či
	parametr, hledá ji v celém „scope chain“ (česky by se asi dalo
	přeložit jako „zřetězení oborů platnosti“). Tomuto tématu (stejně
	jako uzávěrům) se ale budu věnovat někdy příště.</li>

	<li>pokud proměnnou někde nalezne, zapíše do ní přiřazovanou hodnotu</li>

	<li>pokud ji nenalezne, vytvoří ji <strong>v globálním oboru
	platnosti</strong> a zapíše do ní hodnotu.</li>
</ul>

<h2>Je to opravdu tak zlé?</h2>

<p>Ano.</p>

<ul>
	<li>Pokud nepoužíváte či zapomínáte <code>var</code>, zasviníte si
	globální obor platnosti spoustou proměnných, které tam nepatří. Obecně
	je za správnou považována snaha minimalizovat množství globálně platných
	proměnných, které kód vytváří, na jednu či méně.</li>

	<li>Snadno mohou vzniknout chyby, které těžko odhalíte:</li>
</ul>

<pre
class="brush: jscript; pad-line-numbers: false;">
function cykluj() {
   for (i = 0; i &lt; 10; i++) {
       cyklujvic();
   }
}

function cyklujvic() {
   for (i = 0; i &lt; 5; i++) {
       console.log(i);
   }
}

cykluj();

</pre>

<p>Vidíte průšvih? Obě funkce pracují se stejnou globální proměnnou.
Nejen, že se kód bude chovat jinak, než bylo nejspíš zamýšleno, ale
dokonce skončí v nekonečné smyčce (funkce <code>cyklujvic</code> vždy
přenastaví proměnnou <code>i</code> a skončí na hodnotě <code>5</code>,
tudíž funkce <code>cykluj</code> nikdy nedojde na konečnou hodnotu). A teď
si představte, že dané funkce jsou rozmístěny ve dvou odlišných souborech
v jiných částech projektu.</p>

<ul>
	<li>můžete se omylem dostat do konfliktu s vlastnostmi objektu window
	(Globální proměnné jsou totiž vlastnostmi tzv. globálního objektu,
	kterým je v prohlížeči právě window, v <a
	href="http://nodejs.com">node.js</a> je jím objekt global)</li>

	<li>tuto situaci ještě komplikuje Internet Explorer, který registruje pro
	elementy v DOM, které mají nastaven atribut <code>id</code> vlastnost objektu
	window (tedy globální proměnnou). Pokud se vám pak sejde stejné jméno
	proměnné jako <code>id</code> nějakého elementu a zapomenete na
	<code>var</code>, dojde k chybě.</li>
</ul>

<h2>Doporučení na závěr</h2>

<p>Používejte klíčové slovo <code>var</code> vždy. Zvolte si vývojové
prostředí, které vás na nedeklarovanou proměnnou umí upozornit.
Používejte <a href="http://jslint.com">http://jslint.com</a>.</p>

<p>A sledujte <a href="http://zapisnik.pepiino.cz/feed/">RSS</a> nebo <a
href="http://twitter.com/pepiino">twitter</a>, jelikož již brzy vám povím
o dalších věcech, které byste o Javascriptu měli vědět.</p>

<!-- by Texy2! --><img src="http://feeds.feedburner.com/~r/pepiinocz/~4/9xn0NGN_T0Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-1-promenna-a-globalni-obor-platnosti/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-1-promenna-a-globalni-obor-platnosti/</feedburner:origLink></item>
		<item>
		<title>Co byste měli vědet o Javascriptu [0]: Úvod</title>
		<link>http://feedproxy.google.com/~r/pepiinocz/~3/C37pP57VP1o/</link>
		<comments>http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-0-uvod/#comments</comments>
		<pubDate>Fri, 05 Nov 2010 09:00:10 +0000</pubDate>
		<dc:creator>Josef Adamčík</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Co byste měli vědět o JavaScriptu]]></category>

		<guid isPermaLink="false">http://zapisnik.pepiino.cz/?p=181</guid>
		<description><![CDATA[
<p>Vítejte v úvodním příspěvku průvodce po temných i světlých
zákoutích JavaScriptu. Každý týden tu naleznete kratší zápisky
o různých vlastnostech jazyka, které je dobré znát. JavaScript je mezi
programovacími jazyky výjimečný tím, že většina z nás k němu přijde
bez jakýchkoliv znalostí. Syntaxe je podobná jazykům vycházejícím z C a
za pomoci (většinou mizerných) tutoriálů na internetu dokáže spatlat
„nějak“ funkční kus […]</p>
]]></description>
			<content:encoded><![CDATA[
<p><img
src="http://zapisnik.pepiino.cz/wp-content/upload/2010/10//js-reserved-used2-193x300.png"
alt="Rezervovaná slova JavaScriptu (výběr těch, která mají význam"
class="left" /> Vítejte v úvodním příspěvku průvodce po temných
i světlých zákoutích JavaScriptu. Každý týden tu naleznete kratší
zápisky o různých vlastnostech jazyka, které je dobré znát.</p>

<p>JavaScript je mezi programovacími jazyky výjimečný tím, že většina
z nás k němu přijde bez jakýchkoliv znalostí. Syntaxe je podobná
jazykům vycházejícím z C a za pomoci (většinou mizerných) tutoriálů na
internetu dokáže spatlat „nějak“ funkční kus kódu každý. Mnohdy si
člověk vystačí bez pořádných znalostí jazyka poměrně dlouho a než se
naděje, tvoří už svojí první velkou Javascriptovou věc. A pak to může
dost bolet. V JavaScriptu (podobně jako v ostatních jazycích) existuje
mnoho temných zákoutí, jejichž neznalost velice zkomplikuje vývojářův
život. A naopak má svoje silné stránky, jejichž pochopení mu může
pomoci dosáhnout výsledků rychleji, lépe a dokonce zábavněji ;-) .
Ostatně, <a href="http://zapisnik.pepiino.cz/mam-se-naucit-javascript/">už
jsem o tom nedávno psal</a>.</p>

<p>Nebudu se zde zabývat základními konstrukcemi jazyka, jejichž popis se
válí na každém internetovém rohu. Chci se spíš soustředit a informace,
které bývají (bohužel) často v materiálech pro začátečníky opomíjeny
nebo dokonce(!) uváděny špatně. Obvyjkle programátoři neznají ani po
mnoha letech občasného užívání Javascriptových pilulek, nebo jim úplně
nerozumí.</p>

<p>Seriál má vlastní <a
href="http://zapisnik.pepiino.cz/tagy/co-byste-meli-vedet-o-javascriptu/">štítek</a>
a také <a
href="http://zapisnik.pepiino.cz/tagy/co-byste-meli-vedet-o-javascriptu/feed/">vlastní
RSS</a>.</p>

<p>Držte si čepice, přístí týden začínáme!</p>

<h2>Aktualizace: zatím vyšlo</h2>

<p>Zatím v seriálu vyšly následující články:</p>

<ol>
	<li><a
	href="http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-1-promenna-a-globalni-obor-platnosti/">proměnná
	a globální obor platnosti</a></li>

	<li><a
	href="http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-2-javascript-nema-block-level-scope/">Javascript
	nemá ‚block-level scope‘</a></li>

	<li><a
	href="http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-3-variable-hoisting/">variable
	hoisting</a></li>

	<li><a
	href="http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-4-deklarace-funkce-a-funkce-jako-vyraz/">deklarace
	funkce a funkce jako výraz</a></li>

	<li><a
	href="http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-5-with-je-zly-carodej/">with
	je zlý čaroděj</a></li>
</ol>

<!-- by Texy2! --><img src="http://feeds.feedburner.com/~r/pepiinocz/~4/C37pP57VP1o" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-0-uvod/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-0-uvod/</feedburner:origLink></item>
		<item>
		<title>Střípky ze světa webu, Javascriptu a vůbec …</title>
		<link>http://feedproxy.google.com/~r/pepiinocz/~3/bFDxPGA-glE/</link>
		<comments>http://zapisnik.pepiino.cz/stripky-ze-sveta-webu-javascriptu-a-vubec/#comments</comments>
		<pubDate>Wed, 27 Oct 2010 14:03:31 +0000</pubDate>
		<dc:creator>Josef Adamčík</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[odkazy]]></category>

		<guid isPermaLink="false">http://zapisnik.pepiino.cz/?p=257</guid>
		<description><![CDATA[
<p>Aneb co mě zaujalo v posledním týdnu? Nezávisle na tom, zda jde
o aktuální novinky, nebo jsem objevil ameriku :) The Noded je nový podcast
o node.js. Natolik nový, že tvůrci stále nedokázali stvořit web. První
díl je ale ke stažení a můžete také sledovat @thenoded na twitteru.
Alespoň v prvním dílu se podcast hojně věnuje NodeCore, takže varuji
před […]</p>
]]></description>
			<content:encoded><![CDATA[
<div><img
src="http://zapisnik.pepiino.cz/wp-content/upload/2010/10/calendar180.jpg"
alt="Ilustrace" class="left" /></div>

<p>Aneb co mě zaujalo v posledním týdnu? Nezávisle na tom, zda jde
o aktuální novinky, nebo jsem objevil ameriku :)</p>

<p><a href="http://thenoded.com">The Noded</a> je nový podcast o <a
href="http://nodejs.org">node.js</a>. Natolik nový, že tvůrci stále
nedokázali stvořit web. <a href="http://thenoded.com/episode-1.mp3">První
díl je ale ke stažení</a> a můžete také sledovat <a
href="http://twitter.com/thenoded">@thenoded na twitteru</a>. Alespoň
v prvním dílu se podcast hojně věnuje NodeCore, takže varuji před
spoustou „céčkovských“ termínů a témat.</p>

<p><a href="https://developer.mozilla.org/en/Using_the_Web_Console">Firefox
4 bude obsahovat jednoduchou vývojářskou konzoli</a>. Vývojáří
rozšíření <a
href="http://blog.getfirebug.com/2010/10/24/firebug-metamorphosis/">Firebug
reagují</a>: <q>„Simply working harder to compete is equal to giving up.
Instead we have to raise the bar!“</q> Držím palce.</p>

<p><a
href="http://www.sencha.com/blog/2010/10/26/introducing-sencha-animator-the-html5-css3-alternative-to-flash/">Společnost
Sencha zveřejnila developer preview aplikace Sencha Animator</a>. Mělo by jít
o CSS3 alternativu k Flashi. Vypadá velice zajímavě. Jen škoda, že se mi
ji nepodařilo ani spustit.</p>

<p>Na blogu <a href="http://dailyjs.com/">DailyJs</a> vychází již od února
seriál <a href="http://dailyjs.com/tags.html#lmaf">Let's Make a Framework</a>.
Autor postupně prochází různé kroky tvorby jednoduchého javascriptového
frameworku od architektury, přes implementaci selektorů, obsluhu událostí
až po podporu pluginů. Vznikající framework samozřejmě nemá být
konkurencí existujícím hvězdám, ale jen učební pomůckou. Pokud je pro
vás fungování vašeho oblíbeného JS frameworku magií a nechce s vám hned
studovat jeho kód, doporučuji projít aspoň tento seriál.</p>

<p><a
href="http://code.google.com/intl/cs-CZ/web/ajaxcrawling/docs/getting-started.html">Podpora
pri indexaci AJAXových aplikací od Google</a> a video záznam z přednášky
<a href="http://developer.yahoo.com/yui/theater/video.php?v=glass-node">Using
Node.js and YUI 3</a> na YUI Theater spolu souvisí. Kdo pozná jak, má u mě
zmrzlinu. :)</p>

<!-- by Texy2! --><img src="http://feeds.feedburner.com/~r/pepiinocz/~4/bFDxPGA-glE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://zapisnik.pepiino.cz/stripky-ze-sveta-webu-javascriptu-a-vubec/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://thenoded.com/episode-1.mp3" length="29097034" type="audio/mpeg" />
		<feedburner:origLink>http://zapisnik.pepiino.cz/stripky-ze-sveta-webu-javascriptu-a-vubec/</feedburner:origLink></item>
		<item>
		<title>Promote.js: za lepší dokumentaci Javascriptu</title>
		<link>http://feedproxy.google.com/~r/pepiinocz/~3/8Ca05hw5gpA/</link>
		<comments>http://zapisnik.pepiino.cz/promote-js-za-lepsi-javascriptovou-dokumentaci/#comments</comments>
		<pubDate>Sat, 23 Oct 2010 15:50:21 +0000</pubDate>
		<dc:creator>Josef Adamčík</dc:creator>
				<category><![CDATA[Nezařazeno]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://zapisnik.pepiino.cz/?p=203</guid>
		<description><![CDATA[
<p>Zkusili jste někdy do vašeho oblíbeného vyhledávače zadat termín
‚javascript‘? Nebo nějaké slovní spojení týkající se dokumentaci či
učení javascriptu? Na prvních pozicích se objevují stránky jako
w3schools.com, javascript.com. Prostě staré a nepříliš kvalitní zdroje
oblepené reklamou. Účastníci nedávné konference JSConf v Berlíně se
rozhodli, že je potřeba se současnou situací něco udělat. Tak vzniklo
„hnutí“ […]</p>
]]></description>
			<content:encoded><![CDATA[
<div title="JS String .substring"><a
href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String"><img
src="http://static.jsconf.us/promotejsv.gif" alt="JS String .substring"
class="left" /></a></div>

<p>Zkusili jste někdy <a href="http://www.google.com/search?q=JavaScript">do
vašeho oblíbeného vyhledávače zadat termín ‚javascript‘</a>? Nebo
nějaké slovní spojení týkající se dokumentaci či učení javascriptu? Na
prvních pozicích se objevují stránky jako w3schools.com, javascript.com.
Prostě staré a nepříliš kvalitní zdroje oblepené reklamou.</p>

<p>Účastníci nedávné konference JSConf v Berlíně se rozhodli, že je
potřeba se současnou situací něco udělat. Tak vzniklo „hnutí“ <a
href="http://promotejs.com">Promote.js</a>. Stačí navštívit uvedenou
stránku, zkopírovat náhodně vygenerovaný kód obrázku s odkazem a vložit
ho do svého webu, který by se ideálně měl alespoň trochu zabývat
javascriptem. Výsledek můžete vidět v pravém sloupci mého
zápisníku.</p>

<p>Odkazy jsou náhodně vybírané z databáze a cílí i na konrétní pojmy
(javascript array, object a podobně). Z počátku směřovaly všechny
vygenerované odkazy na stránky <a
href="https://developer.mozilla.org/en/JavaScript">Mozzila Developer Center</a>,
které obsahují poměrně pěknou dokumentaci jazyka a souvisejících témat.
Postupně přibývají další zdroje (můžete sami nějaký navrhnout pomocí
kontaktů na stránce). Všiml jsem si například odkazů na některé <a
href="http://howtonode.org/object-graphs">obecně javascriptové články na
blogu howtonode</a>.</p>

<p>A funguje to? Zatím částečně. Průběžné výsledky včetně grafu
vývoje naleznete na stránce <a
href="http://arewefirstyet.com/">arewefirstyet.com</a>. A abych nezapomněl, <a
href="http://twitter.com/promotejs">@promotejs je samozřejmě i na
twitteru</a>.</p>

<p>Tak šup s odkazem na web!</p>

<!-- by Texy2! --><img src="http://feeds.feedburner.com/~r/pepiinocz/~4/8Ca05hw5gpA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://zapisnik.pepiino.cz/promote-js-za-lepsi-javascriptovou-dokumentaci/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://zapisnik.pepiino.cz/promote-js-za-lepsi-javascriptovou-dokumentaci/</feedburner:origLink></item>
	</channel>
</rss>

