В чем разница между этими двумя способами экспорта из модуля Javascript? - PullRequest
0 голосов
/ 19 октября 2018

Я новичок в модулях JS, и меня смущает следующее:

Явное декларирование y и возвращение его приведет к его экспорту:

// Outputs "hello"
(function (x) {
    var y = x;
    return y;
}('hello'));

// Outputs "y is not defined"
console.log(y);

Объявление y явно & не , возвращая его, не экспортирует его:

// Outputs "undefined"
(function (x) {
    var y = x;
}('hello'));

// Outputs "y is not defined"
console.log(y);

Объявление y неявно & не возвращение приведет к глобальномуscope?

// Outputs "undefined"
(function (x) {
    y = x;
}('hello'));

// Outputs "hello"
console.log(y);

Я понимаю, что происходит в первых двух примерах, но что делает третий случай и почему?

1 Ответ

0 голосов
/ 19 октября 2018

В этом случае вывод будет hello, поскольку y объявлено без var или let, поэтому y будет в глобальной (оконной) области действия

// Outputs "undefined"
(function(x) {
  y = x;
}('hello'));

// Outputs "hello"
console.log(y);

В этом случае y объявляется с ключевым словом var, поэтому область действия переменной y находится внутри функции и не может быть доступна вне функции.Таким образом, он выбросит ReferenceError: y is not defined. Обратите внимание на термин ReferenceError , который выдается при обращении к несуществующей переменной.В приведенном ниже случае вы пытаетесь ссылаться на переменную вне ее области действия

// Outputs "hello"
(function(x) {
  var y = x;
  return y;
}('hello'));

// Outputs "y is not defined"
console.log(y);

Но если вы назначите iife переменной, вы можете получить возвращаемое значение

let k = (function(x) {
  var y = x;
  return y;
}('hello'));

// Outputs "y is not defined"
console.log(k);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...