почему внешняя переменная недоступна, если она условная - PullRequest
0 голосов
/ 28 февраля 2019
function NumStuff(num) {
    this.num = num;
    this.multipleOfFour = function() {

        //if multiple of 4
        if (this.num % 4 === 0) {
            console.log(this.num + " is a multiple of Four");
            console.log("the structure of the given integer " +
                this.num + " is ");

            for (let i = 0; i < this.num; i++) {
                if (4 * i === this.num) { //why is this.num outside of 
                    //lexical scope
                    console.log(this.num + " = " + i + " x 4");
                    break;
                }
            }
            //if not a multiple of 4
        } else {
            console.log(this.num + " isn't a multiple of 4 but here is the integer's structure:");
            let remainder = this.num % 4;
            let tempNum = this.num - remainder;
            for (let i = 0; i < tempNum; i++) {
                if (4 * i === tempNum) {
                    console.log(this.num + " = " + i + " x 4 + " + remainder);
                    break;
                }
            }
        }
    };
}

let num = prompt("Enter an integer:");
let n = new NumStuff(num);
n.multipleOfFour();

Скажем, мы вводим 20 в качестве нашего числа.Он проходит через multipOfFour () и попадает в первый, если условный.This.num (20)% 4 равен 0, поэтому он проходит. Затем мы перебираем i, чтобы найти число, умноженное на 4, равное 20. This.num находится в области действия оператора for, но не в области действиявнутреннее условие if для оператора for.Почему это так?

1 Ответ

0 голосов
/ 28 февраля 2019

Это в объеме.Это не проблема.

Но this.num - это string (это то, что prompt всегда возвращает), в то время как 4 * i - number4 * i === this.num будет всегда быть ложным, независимо от того, что вы вводите в ответ на запрос.

Попробуйте это ( здесь ):

for (let i = 0; i < this.num; i++) {
    console.log('x', 4 * i, this.num, 4 * i === this.num);

Легко исправить это let num = parseInt(prompt("Enter an integer:"));.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...