Две функции были сопоставлены с кронштейном. IIFE исполнение. Результаты NaN - PullRequest
0 голосов
/ 06 марта 2020

Функция возврата числового значения c и функция неопределенного возврата в скобках сравнивались и затем выполнялись с использованием IIFE. Результат NaN. Что случилось?

function Point(x, y) {
    this.x = x;
    this.y = y;
}
console.log(
    (
        new Point(5, 8).sum || (() => undefined)
    )() // IIFE : undefined
);

// sum() added
Point.prototype.sum = function () {
    return this.x + this.y;
}

console.log(
    (new Point(5, 8).sum)() 
    // 13
);

console.log(
    // typeof : number
    (
        new Point(5, 8).sum || (() => undefined)

    )()//! IIFE : NaN. ???? WH~~~Y????
);

В последнем файле console.log голая психика рухнула. Дайте мне знать, почему ....: (

1 Ответ

1 голос
/ 06 марта 2020

Когда вызывается в этом контексте, this не то, что вы ожидаете; это происходит из окружающего контекста, потому что функция sum не связана.

Это означает, что тело вашей функции в итоге оценивает undefined + undefined, что составляет NaN.

Упрощенный пример эту проблему можно увидеть с помощью:

let p = new Point(5, 8)
let f1 = p.sum
f1() //-> NaN

Вместо этого вы можете вручную передать параметр, равный this:

f1.call(p) //-> 13

Или вы можете явно связать эту функцию с указанным параметром. c this:

let f2 = Point.prototype.sum.bind(new Point(5, 8))
f2() //-> 13
...