<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Komentarze do: Zagadki rozwiązane &#8211; czyli o scope, zaokrąglaniu liczb i tak dalej&#8230;</title>
	<atom:link href="http://ferrante.pl/2009/04/16/zagadki-rozwiazane-czyli-o-scope-zaokraglanie-liczb-i-tak-dalej/feed/" rel="self" type="application/rss+xml" />
	<link>http://ferrante.pl/2009/04/16/zagadki-rozwiazane-czyli-o-scope-zaokraglanie-liczb-i-tak-dalej/</link>
	<description>Technologie internetowe, PHP5, Python, Javascript. Publicystyka i kursy w najlepszym wydaniu.</description>
	<lastBuildDate>Mon, 06 Sep 2010 18:50:42 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>Autor: ferrante</title>
		<link>http://ferrante.pl/2009/04/16/zagadki-rozwiazane-czyli-o-scope-zaokraglanie-liczb-i-tak-dalej/comment-page-1/#comment-9000</link>
		<dc:creator>ferrante</dc:creator>
		<pubDate>Fri, 17 Apr 2009 16:48:41 +0000</pubDate>
		<guid isPermaLink="false">http://ferrante.pl/?p=395#comment-9000</guid>
		<description>Dzieki Rafal za szersze wyjasnienie, jestes w przypisach ;-). Pozdrawiam</description>
		<content:encoded><![CDATA[<p>Dzieki Rafal za szersze wyjasnienie, jestes w przypisach ;-). Pozdrawiam</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: pio</title>
		<link>http://ferrante.pl/2009/04/16/zagadki-rozwiazane-czyli-o-scope-zaokraglanie-liczb-i-tak-dalej/comment-page-1/#comment-8999</link>
		<dc:creator>pio</dc:creator>
		<pubDate>Fri, 17 Apr 2009 14:43:39 +0000</pubDate>
		<guid isPermaLink="false">http://ferrante.pl/?p=395#comment-8999</guid>
		<description>@Rafał Kukawski: &quot;W JS działa to na takiej zasadzie, że zmienne są tworzone na samym początku aktualnego scope’u (...)&quot;

i tego w mordę nie wiedziałem, hehe.
pozdrawiam</description>
		<content:encoded><![CDATA[<p>@Rafał Kukawski: &#8220;W JS działa to na takiej zasadzie, że zmienne są tworzone na samym początku aktualnego scope’u (&#8230;)&#8221;</p>
<p>i tego w mordę nie wiedziałem, hehe.<br />
pozdrawiam</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: Rafał Kukawski</title>
		<link>http://ferrante.pl/2009/04/16/zagadki-rozwiazane-czyli-o-scope-zaokraglanie-liczb-i-tak-dalej/comment-page-1/#comment-8996</link>
		<dc:creator>Rafał Kukawski</dc:creator>
		<pubDate>Fri, 17 Apr 2009 08:32:54 +0000</pubDate>
		<guid isPermaLink="false">http://ferrante.pl/?p=395#comment-8996</guid>
		<description>Witam,
widzę, że przedstawiłeś większość (jak nie wszystkie) ciekawostki związane z JavaScriptem. Przynajmniej nie przyszły mi do głowy inne, warte uwagi cechy tego języka.
Chciałem dorzucić swoje trzy grosze do niektórych zagadek, co powinno bardziej rozjaśnić sprawę tym bardziej początkującym JavaScriptowcom.

Zagadka 1:
Tak jak napisał Damian, wszystkie zmienne globalne stają się własnościami obiektu globalnego. W przypadku stron WWW jest to obiekt window.
Ale nadal nie tłumaczy to faktu, dlaczego wykonanie alert przed zadeklarowaniem zmiennej i tak daje true, że zmienna istnieje, choć jej deklaracja znajduje się później w kodzie. W JS działa to na takiej zasadzie, że zmienne są tworzone na samym początku aktualnego scope&#039;u i każdej z nich przypisana jest początkowo wartość undefined. Wartość zmiennej zostanie przypisana dopiero w momencie wykonania deklaracji zmiennej (variable statement).

Rozważmy taki kod:

&lt;pre&gt;&lt;code&gt;alert(&#039;a&#039; in this);
alert(&#039;b&#039; in this);
alert(&#039;c&#039; in this);
var a = 1;
switch(a){
	case 1:
     		var b = 2;
	break;
	case 2:
     		var c = 3;
  	break;
}&lt;/code&gt;&lt;/pre&gt;

Wszystkie 3 zmienne istnieją, mimo iż case 2 nigdy nie zostanie wykonany i faktyczna deklaracja zmiennej &#039;c&#039; nigdy nie nastąpi.

Powyższe tłumaczy też &#039;false&#039; z drugiej zagadki, ponieważ mamy do czynienia z innym scrope&#039;m. Druga zagadka prezentuje też pewną źle odbieraną technikę programowania. W JS powinno się pamiętać, żeby zawsze deklarować zmienne z użyciem var. Jeśli planujemy z innego scope&#039;u przypisać jakąś wartość dla zmiennej globalnej, powinniśmy w globalnej przestrzeni nazw wcześniej zadeklarować tę zmienną (jako zmienną typu undefined). Uchroni to programistę przed próbą odczytu nieistniejącej zmiennej, co skutkować będzie błędem.

Zagadka 4:
Dodam tylko, że nie jest to wyłącznie problem języka JavaScript, ale wszystkich innych, które opierają swoje działanie o IEEE 754. Rozważano też wprowadzenie do Ecma-Scriptu drugiego typu numerycznego - decimal. W sieci było sporo dyskusji na ten temat, szczególnie dotyczyły faktów, że wprowadzenie drugiego typu może wprowadzić sporo zamieszania, oraz że obliczenia na typie dziesiętnym są dosyć powolne. Specyfikacja Ecma-Script 4 definiuje aż 5 typów reprezentacji liczb + stary typ Number, dla wstecznej kompatybilności. Ale przez całą wojnę związaną z rozwojem ES, cała praca nad językiem zaczyna się od nowa (ES 6-th edition).</description>
		<content:encoded><![CDATA[<p>Witam,<br />
widzę, że przedstawiłeś większość (jak nie wszystkie) ciekawostki związane z JavaScriptem. Przynajmniej nie przyszły mi do głowy inne, warte uwagi cechy tego języka.<br />
Chciałem dorzucić swoje trzy grosze do niektórych zagadek, co powinno bardziej rozjaśnić sprawę tym bardziej początkującym JavaScriptowcom.</p>
<p>Zagadka 1:<br />
Tak jak napisał Damian, wszystkie zmienne globalne stają się własnościami obiektu globalnego. W przypadku stron WWW jest to obiekt window.<br />
Ale nadal nie tłumaczy to faktu, dlaczego wykonanie alert przed zadeklarowaniem zmiennej i tak daje true, że zmienna istnieje, choć jej deklaracja znajduje się później w kodzie. W JS działa to na takiej zasadzie, że zmienne są tworzone na samym początku aktualnego scope&#8217;u i każdej z nich przypisana jest początkowo wartość undefined. Wartość zmiennej zostanie przypisana dopiero w momencie wykonania deklaracji zmiennej (variable statement).</p>
<p>Rozważmy taki kod:</p>
<pre><code>alert('a' in this);
alert('b' in this);
alert('c' in this);
var a = 1;
switch(a){
	case 1:
     		var b = 2;
	break;
	case 2:
     		var c = 3;
  	break;
}</code></pre>
<p>Wszystkie 3 zmienne istnieją, mimo iż case 2 nigdy nie zostanie wykonany i faktyczna deklaracja zmiennej &#8216;c&#8217; nigdy nie nastąpi.</p>
<p>Powyższe tłumaczy też &#8216;false&#8217; z drugiej zagadki, ponieważ mamy do czynienia z innym scrope&#8217;m. Druga zagadka prezentuje też pewną źle odbieraną technikę programowania. W JS powinno się pamiętać, żeby zawsze deklarować zmienne z użyciem var. Jeśli planujemy z innego scope&#8217;u przypisać jakąś wartość dla zmiennej globalnej, powinniśmy w globalnej przestrzeni nazw wcześniej zadeklarować tę zmienną (jako zmienną typu undefined). Uchroni to programistę przed próbą odczytu nieistniejącej zmiennej, co skutkować będzie błędem.</p>
<p>Zagadka 4:<br />
Dodam tylko, że nie jest to wyłącznie problem języka JavaScript, ale wszystkich innych, które opierają swoje działanie o IEEE 754. Rozważano też wprowadzenie do Ecma-Scriptu drugiego typu numerycznego &#8211; decimal. W sieci było sporo dyskusji na ten temat, szczególnie dotyczyły faktów, że wprowadzenie drugiego typu może wprowadzić sporo zamieszania, oraz że obliczenia na typie dziesiętnym są dosyć powolne. Specyfikacja Ecma-Script 4 definiuje aż 5 typów reprezentacji liczb + stary typ Number, dla wstecznej kompatybilności. Ale przez całą wojnę związaną z rozwojem ES, cała praca nad językiem zaczyna się od nowa (ES 6-th edition).</p>
]]></content:encoded>
	</item>
</channel>
</rss>
