Разбирате ли 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);