Home > JavaScript > Разбирате ли JavaScript ?

Разбирате ли JavaScript ?

Посочените по-долу тестове са написани от Dmitry Baranovskiy в неговия блог под заглавието “So, you think you know JavaScript?“. Интересни са и затова ги copy/paste-вам тук.

Можете ли да отговорите какво ще върне всеки alert() докато четете кода, без да го тествате?

if (!("a" in window)) {
    var a = 1;
}
alert(a);
var a = 1,
    b = function a(x) {
        x && a(--x);
    };
alert(a);
function a(x) {
    return x * 2;
}
var a;
alert(a);
function b(x, y, a) {
    arguments[2] = 10;
    alert(a);
}
b(1, 2, 3);
function a() {
    alert(this);
}
a.call(null);
Categories: JavaScript Tags:
Вижте всички статии от
Technology lover
Този автор е написал 156 статии

  • Само това третото не можах да позная. Идея си нямам как изведнъж променливата приема съдържанието на функцията. Някакви магии 🙂

  • Благомир Иванов

    Честно казано това и аз не го разбрах, но пък работи точно както казваш 🙂

  • това става заради така-наречения ‘hoisting’ който извършва javascript. във всеки scope където се декларират функции и променливи, компилаторът анализира content и ‘премества’ всички променливи най-горе, последвани от assignment-а, който става по-долу. В този случай, става равносилно на: var a; a = function(x) { return x * 2; }; alert(a);

    прочетете повече на google 🙂

  • ето и един пример, където вместо да получим exception поради употребата на не-инциализирана променлива, получаваме просто undefined, защото е празна след hoisting:

    http://www.jsfiddle.net/4tYRD/1/

    (function() {
    alert(foo); // undefined but not an exception
    var foo = 1;
    })();