Почему этот код не работает, когда я пытаюсь использовать IFFE - PullRequest
0 голосов
/ 20 июня 2019

Я пытался запустить этот код.

var temp = (function () {
var a =10;
return {
    function (a) {
        console.log('Value of a is ' + a);
    }
 }
})();
temp();

Я ожидаю, что IIFE вернет функцию и присвоит ее переменной temp, но вместо этого я получаю ошибку ниже.

Uncaught TypeError: temp is not a function

Что с этим не так?

Ответы [ 3 ]

0 голосов
/ 20 июня 2019

Вам необходимо удалить литералы объекта из return и вернуть именованную функцию

var temp = (function() {
  var a = 10;
  return function test(a) {
    console.log('Value of a is ' + a);
  }
})();
temp();
0 голосов
/ 20 июня 2019

Полагаю, вы запутались с '{}' вместо '()'.

var temp = (function () {
var a =10;
return (
    function (a) {
        console.log('Value of a is ' + a);
    }
 )
})();
temp(<pass 'a' here>);

Далее вы возвращаете определение функции, которое не связано с 'a'.Попробуйте вызвать 'temp' с аргументом.

0 голосов
/ 20 июня 2019

Вы возвращаете блок, внутри которого определена функция. Вместо этого верните функцию напрямую. Пожалуйста, найдите следующий код для справки.

   var temp = (function () {
   var a =10;
   return function (a) {
      console.log('Value of a is ' + a);
      }
   })();
   temp();

И если вы хотите получить доступ к значению 'a' из внешней области видимости, тогда используйте другое имя для параметра во внутренней функции.

   var temp = (function () {
   var a =10;
   return function (b) {
      a = b || a;
      console.log('Value of a is ' + a);
      }
   })();
   temp();
...