Почему я не работаю на простом примере? - PullRequest
0 голосов
/ 12 февраля 2019

Я не могу понять, почему вызов функционального выражения не работает и выдает ошибку.

Можете ли вы объяснить это мне?

var a = function (x) {
  alert(x)
}

(function() {
   a(1);
}());

Спасибо всем

Задача оказалась намного проще, чем я думал

Ответы [ 3 ]

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

Поскольку в тот момент, когда вы вызываете функцию, назначение еще не произошло.

var a; // hoisted, value undefined, no function

// later

a = function (x) {
    alert(x);
}(function() {
    a(1);      // a is still no function
}());

Или вам нужно вставить точку с запятой, чтобы отделить назначение от вызова,

var a = function(x) {
  console.log(x);
};
(function() {
  a(1);
}());

или взять void для разделения

var a = function(x) {
  console.log(x);
}
void (function() {
  a(1);
}());
0 голосов
/ 12 февраля 2019

Это потому, что JS анализирует IIFE как вызов аргумента для функции, сделайте это, добавив точку с запятой

var a = function (x) {
  alert(x)
};    
(function() {
   a(1);
}());
0 голосов
/ 12 февраля 2019

Определить функцию a внутри IIFE. См. здесь

(function() {
  function a(x) {
    alert(x)
  }
  a('x')
}());
...