Pull to refresh

Короткая JS-задачка для понедельника

Reading time2 min
Views5.3K
image

Которая родилась в процессе изучения кошмаров LexicalEnvironment и вообще ликбеза на тему "Почему оно работает так".


Задача получилась действительно из серии wtfjs, но после внимательного рассмотрения — полностью укладывается в логику работы языка.


Итак, сразу к делу:


Есть модуль module.js:


// module.js

function getRandomNumber() {
    return Math.floor(Math.random() * 100)
}
var a = 10;
function b() { 
    a = 100;
    return;
    function a() {}
}
b();
module.exports = getModule();
async function getModule() {
    return {
        a,
        get getterA() {
            return a
        },
        x: ++a + ++a,
        rndA: a + getRandomNumber(),
        getA: function() { return this.a },
        getArrowA: () => this.a,
        getRndA: () => a + getRandomNumber()
    }
}

Он вызывается из файла index.js:


// index.js

a = 5;
(async () => {
  let moduleObj1 = await require("./module")
  let moduleObj2 = await require("./module")
  console.log(
    `
    ============================
    m1Obj.a:              | ${moduleObj1.a}
    m1Obj.getterA:        | ${moduleObj1.getterA}
    m1Obj.x:              | ${moduleObj1.x}
    m1Obj.getA:           | ${moduleObj1.getA()}
    m1Obj.getArrowA:      | ${moduleObj1.getArrowA()}
    m1Obj.rndA:           | ${moduleObj1.rndA}
    m1Obj.getRndA:        | ${moduleObj1.getRndA()}
    ============================
    m2Obj.a:              | ${moduleObj2.a}
    m2Obj.getterA:        | ${moduleObj2.getterA}
    m2Obj.x:              | ${moduleObj2.x}
    m2Obj.getA:           | ${moduleObj2.getA()}
    m2Obj.getArrowA:      | ${moduleObj2.getArrowA()}
    m2Obj.rndA:           | ${moduleObj2.rndA}
    m2Obj.getRndA:        | ${moduleObj2.getRndA()}
    ============================
    a:                    | ${a}
    ============================`
  )
})()

Собственно, вопрос: что будет выведено в консоль?


Ответ:
    ============================
    m1Obj.a:              | 10
    m1Obj.getterA:        | 12
    m1Obj.x:              | 23
    m1Obj.getA:           | 10
    m1Obj.getArrowA:      | 5
    m1Obj.rndA:           | рандомное число от 12 до 111
    m1Obj.getRndA:        | рандомное число от 12 до 111
    ============================
    m2Obj.a:              | 10
    m2Obj.getterA:        | 12
    m2Obj.x:              | 23
    m2Obj.getA:           | 10
    m2Obj.getArrowA:      | 5
    m2Obj.rndA:           | рандомное число от 12 до 111
    m2Obj.getRndA:        | рандомное число от 12 до 111
    ============================
    a:                    | 5
    ============================
Only registered users can participate in poll. Log in, please.
Задачу
5.38% Решил, ответ сошёлся5
9.68% Решил, ответ сошёлся не полностью9
0% Решил, ответ не сошёлся0
84.95% Плюнул и не решал, интересны результаты79
93 users voted. 36 users abstained.
Tags:
Hubs:
Total votes 17: ↑13 and ↓4+9
Comments4

Articles