JS Функции и IIFE - PullRequest
       17

JS Функции и IIFE

0 голосов
/ 09 января 2020

Когда я запускаю следующий фрагмент кода JS:

var x = (function () {
    console.log('Hello x!');
});

var y = function () {
    console.log('Hello y!');
};

var z = (function () {
    console.log('Hello z!')
    return 2;
})();

x();

y();

На консоли браузера выводится следующий вывод:

Hello z!

Hello x!

Hello y!

Почему " Hello z! " печатается раньше " Hello x !" & " Здравствуйте, y! ". И как взаимодействует выражение немедленного вызова функции (IIFE) с переменной 'z'?

PS: я новичок.

Ответы [ 3 ]

1 голос
/ 09 января 2020

Поскольку это IIFE:

var z = (function () {
    console.log('Hello z!')
    return 2;
})();

Без IIFE выше код можно переписать так:

var x = (function () {
    console.log('Hello x!');
});

var y = function () {
    console.log('Hello y!');
};

var z = function () {
    console.log('Hello z!')
    return 2;
};
z();

x();

y();

Именно поэтому «Hello z» печатается первым

0 голосов
/ 09 января 2020

Первый I в IIFE означает Немедленно.
Вот почему эта функция выполняется первой.

Кроме того, IIFE не может взаимодействовать с переменной 'z'.
Но вы можете передать Аргументы таковы:

var hi = 'Hello z!';

var z = (function (txt) {
    console.log(txt)
})(hi);

Надеюсь, это поможет.

0 голосов
/ 09 января 2020

Как и в предыдущем ответе, ваш код написан так: стек вызовов сначала вызывает IIFE, затем функцию x, затем функцию y. Если вы хотите хорошее визуальное представление, посмотрите Loupe от Philip Roberts (http://latentflip.com/loupe/). Это позволяет вам написать код и пошагово просмотреть, как он вызывается и выполняется. Мне очень помогло, когда я пытался понять последовательность выполнения.

...