Почему несколько функций внутри IIFE выполняют последнюю функцию? - PullRequest
0 голосов
/ 26 февраля 2019

На самом деле я понятия не имею, как вывод этого кода является числом.Кто-нибудь, помогите понять, с какой логикой работает JS в этом примере?

<script>

var f = (
  function f(){ return "1"; }, 
  function g(){ return 2; }
)();

console.log(typeof f);

</script>

Ответы [ 4 ]

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

Итак, верно, оператор запятой.Но более важным является изменение контекста функций.Они больше не доступны из глобальной области видимости.

Некоторые расширения могут быть в этом ответе Влияет ли оператор запятой на контекст выполнения в Javascript? :

var f = (
        function f() { return "1"; }, 
        function g() { return 2; }
    )();

console.log(f);
console.log(typeof f);
console.log(g()); // throws error: 'g' is not defined
0 голосов
/ 26 февраля 2019

Здесь f не является функцией.

Вместо этого содержит значение, возвращаемое функцией g.

f в настоящее время содержит возвращаемое значениево IIFE

var f = (
  function f(){ return "1"; }, 
  function g(){ return 2; }
)();

console.log(f);

</script>
0 голосов
/ 26 февраля 2019

Из-за оператора запятой .

x = a, b;

Это вычисляет a, затем оно оценивает b, и используется результат b.Таким образом, a оценивается только для его побочных эффектов , в противном случае его результат отбрасывается.

Это означает, что

var f = (
   function f(){ return "1"; }, 
   function g(){ return 2; }
)();

- причудливый способ написания

var f = (function g(){ return 2; })();

, который представляет собой необычный способ написания

var f = 2;

и 2 - это число.

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

Вы используете оператор запятой .Вы в основном выполняете g здесь

Оператор запятой оценивает каждый из своих операндов (слева направо), а возвращает значение последнего операнда .

var f = (
  function f(){ return "1"; }, 
  function g(){ return 2; }
)()

похож на:

var temp = function g(){ return 2; }
f = temp() // returns 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...