В этом случае вывод будет 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);