folder Tahribat.com Forumları
linefolder Html - CSS - XML - JavaScript - Ajax
linefolder Javascript Basit Görünen Beyin Yakan Sorular



Javascript Basit Görünen Beyin Yakan Sorular

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    makets
    makets's avatar
    Kayıt Tarihi: 17/Ocak/2010
    Erkek

    selam mürid(e)ler. JS çlışmaya başladım. Aşağıda 7 tane kod örneği verdim ve ekran çıktılarını yanına yazdım. Kodların bu çıktıları nasıl aldığını,  1) 2) 3) ... şeklinde sırasıyla açıklayabilecek babayiğit arıyorum. şahsen ben bir türlü çözemedim. (Not: her bir kod örneği consoleda bellek temizlenerek denenmiştir.)

    1)
    a = 2;
    console.log( a ); //2
    
    2)
    var a;
    a = 2;
    console.log( a ); //2
    
    3)
    a = 2;
    var a;
    console.log( a ); //2
    
    4)
    console.log( a ); //2
    var a;
    a= 2;
    
    5)
    var a;
    console.log( a ); //2
    a= 2;
    
    6)
    console.log( a ); //undefined
    var a = 2;
    
    7)
    console.log( a ); //ReferanceError
    a = 2;

     

     

    makets tarafından 05/Kas/17 13:42 tarihinde düzenlenmiştir
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    coder2
    coder2's avatar
    Kayıt Tarihi: 15/Mart/2007
    Erkek

    Beyin yakacak şekilde sormuşsun :)

    Zaten a=2 diyerek atama yapmışsın ilk örnekte. [1-5] aralığındaki sorularında eğer aynı sekmede art arda yazdıysan zaten normal olarak hafızada tuttuğu a=2 değeri basar.

    6. sorudaki kodları yazmadan önce ne yazdın bilmiyorum ama consol de var x =2; şeklinde tanımlama yapınca altında direk undefined yazar belkki onu diyorsundur.

    7. soruda ReferanceError  hatası almışsın. Muhtemelen consol belleğini boşaltıp denedin veya başka sekmede denedin ve tanımlı olmayan bir değişken çağrıldığı için ReferanceError hatası aldın.  

    Not: js öğreneceksen Mozilla mdn bakmanı tavsiye ederim.


    Önceleri Kızlar Utanınca Kızarırdı Şimdilerde Kızarınca Utanıyorlar..
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    makets
    makets's avatar
    Kayıt Tarihi: 17/Ocak/2010
    Erkek

    hocam her birinde ayrı ayrı belleği temizleyerek denedim. Şimdilik şurdan çalışıyorum: https://github.com/getify/You-Dont-Know-JS

    Bu soruları aşabilsem çalışmaya devam edicem ama 2 gündür çözemedim, pis takıldım.

  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SkynetX
    SkynetX's avatar
    Kayıt Tarihi: 06/Şubat/2015
    Erkek

    6 da console.log(a) dersen 'a is not defined' der. Sonra var a = 2; dersen 'undefined' yazar.

     İlkinde a değişkeni yok zaten normal. İkinci durumda ise geri dönüş değeri olmadığı için 'undefined' yazar. Aslında iki durum da farklı.

     

    6 il e7 aynı aslında. Burad asormak gereken soru bence şu olmalı:

    var a = 2; denildiğinde neden 'undefined' döndürüyor da a=2 dediğinde değişkenin değerini döndürüyor?

  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    makets
    makets's avatar
    Kayıt Tarihi: 17/Ocak/2010
    Erkek

    //

    makets tarafından 05/Kas/17 14:54 tarihinde düzenlenmiştir
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    yunusemre
    yunusemre's avatar
    Kayıt Tarihi: 22/Ağustos/2016
    Erkek

    takip

    yunusemre tarafından 05/Kas/17 15:13 tarihinde düzenlenmiştir

    "Programcılar saatler boyunca çalışmak zorunda kalmalarına engel olacak sistemler tasarlamaya saatler boyunca uğraşırlar." David Allen
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    PcK0
    PcK0's avatar
    Kayıt Tarihi: 13/Nisan/2007
    Erkek

    Güzel sorular. Zaten sorunlu sorular olduğu için ekstradan sorunlar çıkartmasın diye tarayıcıların console bölümünden değil her biri için tek tek dosya oluşturup inceleyip bu mesajımı editleyeceğim. yeni mesaj atacağım.

     

    PcK0 tarafından 05/Kas/17 18:46 tarihinde düzenlenmiştir

    Sadece bi imza..
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Hannibal_King
    Hannibal_King's avatar
    Kayıt Tarihi: 22/Ağustos/2010
    Erkek

    Hocam 4 numarayı jsfiddle da denedim undefined yazıyor. 2 sonucunu vermiyo.

  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    herlocksholmes
    herlocksholmes's avatar
    Kayıt Tarihi: 16/Şubat/2014
    Erkek

    1) eger tanimlanmamis bir degiskene deger atarsan global oldugu varsayilir

    2) normal kullanim sekli

    3) global oldu, tekrar tanimlamaya calistin gormezden gelip atama var ise yapip geciyor, var a =3 yapsan 3 yazardi

    4) execution context. tanimlar dahil olduklari scope icerisinde yukari tasinir. ayrica nasil 2 yazdirdin????? a degiskeni bu scope icerisinde tanimlidir ancak log fonksiyonu calistirildiginda undefined dir.

    5) undefined, cunku log fonksiyonundan once deger atamasi yok

    6) tanim yukari tasindi(bkz. execution context) dolayisiyla degeri de olmadigi icin undefined

    7) aslidna log fonksiyonundan sonra a degikeni global sayilacakti ancak bu islemde acik tanim olmadigi, ve a degiskenin bu scope icerisinde daha once tanimlanmadigi icin kod tanimsiz degiskene yapilan cagiridan dolayi calistirilmadi.

    javascriptin satir satir islemedigini unutmayin.


  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    PcK0
    PcK0's avatar
    Kayıt Tarihi: 13/Nisan/2007
    Erkek

    - 1. maddede herhangi bir sorun yok. Değişkenler var ifadesi olmadan üretilirseler global olurlar.
    - 2. maddede herhangi bir sorun yok. Değişken var ile tanımlanmış daha sonra herhangi bir ifade atanmış.
    - 3. maddede herhangi bir sorun yok. Değişken var ifadesi olmadan üretildiği için global değişken olmuş daha sonrasından var ile üretilmeye çalışılmış. Değişkenin tekrar üretilmeye çalışılması değişkenin değerini kaybettirmediği için istediğiniz kadar var yazın herhangi bir etkisi olmayacak.
    - 4. maddede olması gerektiği gibi çalıştırılırsa "undefined" sonucunu veriyor. "2" sonucunu vermiyor.
    - 5. maddede olması gerektiği gibi çalıştırılırsa "undefined" sonucunu veriyor. "2" sonucunu vermiyor..
    - 6. maddede herhangi bir sorun yok. Javascriptte "var [değişken]" ifadeleri fonksiyonun en üstüne taşınırlar. Yani:
    Giriş yapılan kod:
        console.log(a);
        var a = 2;

    Aslında çalışan:
        var a;
        console.log(a);
        a = 2;

    Ekstra örnek:
        function f1() {
            function a() {
                return "merhaba";
            }

            return a();

            function a() {
                return "görüşürüz";
            }
        }

        f1(); // sonuç: "görüşürüz"

    Bununla ilgili daha fazla açıklamayı ve örneği "javascript hoisting" diye arayarak bulabilirsiniz.

    - 7. maddede herhangi bir sorun yok. Bir üstteki durumdaki gibi var ifadesi olmadığı için en üste taşınacak birşey olmuyor. Böylece a değişkeni referans hatası veriyor.

    Son söz: JavaScript'in böyle uyuzlukları var. İnternette "deep understading javascript" yazarak çalışma prensiplerini anlatan sürüsüyle yazıyı inceleyebilirsiniz.


    Sadece bi imza..
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YeniHarman
    YeniHarman's avatar
    Kayıt Tarihi: 17/Haziran/2012
    Erkek

    Önemli:

    JS'nin kapsam (scope) olayı biraz farklı. Ecma 2015'ten önce block scope tanımlı değil. Yani bir değişken ya fonksiyon içinde lokal olur ya da global.

    İkinci ilginç kısım şu: JS'de bir değişken tanımladığınızda, sanki o kapsamın başında yazmışsınız gibi işlem görür. Buna variable hoisting deniyor. Yani

    console.log( a ); //2

    var a;

    a= 2;

    ile

    var a;

    console.log (a);

    a = 2; arasında fark yok.

     

    En üst kapsam tarayıcıda window nesnesinin kapsamı olduğu için senin var ile tanımlamadığın değişkenler hep window nesnesinin altında tanımlanıyor. Mesela node.js'de durum farklı olabilir. Bu olayı console.log(window) ile görebilirsin.

    Bu gibi karışıklıkları önlemek için:

    1) var bildirimini doğru zamanda yapmalısın.

    2) Kapsamlara dikkat etmelisin.

    3) EMCA 2015 standardına uyan bir ortamda çalışacaksan var, let (değişkeni blok kapsamında kısıtlar) ifadelerini doğru kullanmalısın.

    4) undefined'ın not defined ile arasındaki farkı gözetmen gerekir.

    5) Duyurma (decleration) ve ilkleme işlemlerine dikkat etmen gerekir. Zaten normalde ilklendirilmeyen (yani bir atama yapılmamış) hiçbir kaynağı kullanmamak gerekir.

    Kaynaklar:

    https://www.w3schools.com/js/js_scope.asp

    https://scotch.io/tutorials/understanding-scope-in-javascript

    https://stackoverflow.com/questions/500431/what-is-the-scope-of-variables-in-javascript

    https://docs.microsoft.com/en-us/scripting/javascript/advanced/variable-scope-javascript

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#Declarations

     


    Olaylara karışmayın!
Toplam Hit: 2749 Toplam Mesaj: 21
javascript