Об анонимных функциях в Javascript

1

Я новичок в Javascript, но имею глубокие исходные языки OO, такие как С#, Java, C++... В Javascript есть концепция, называемая анонимными функциями. Вот пример кода:

(   function() { 
      for(var x = 0;x<5;x++) {
         console.log(x); 
      } 
   })(); 

Как я понял, в скобках в конце заставляют функцию вызывать себя. Существует и другой синтаксис, который делает то же самое:

var x =   function() { 
      for(var x = 0;x<5;x++) {
         console.log(x); 
      } 
   }(); 

Но прямо сейчас, если я пытаюсь использовать x, он не выполняет функцию снова. Итак, какова цель при использовании задания во второй версии? Могу ли я использовать функцию через x снова?

  • 1
    Поскольку у вас есть () после функции, она немедленно вызовет ее и присвоит возвращаемое значение ( в вашем случае, undefined ). Удалите () и если вы хотите вызвать его немедленно, позвоните по следующей строке, например: x();
  • 0
    Помните, что JavaScript не является объектно-ориентированным. Вместо этого JS ориентирован на прототип, и будут вещи, которые вас удивят.
Показать ещё 3 комментария
Теги:

3 ответа

3
Лучший ответ

Функция самоисполнения известна как IIFE (Expression Expression Function Expression), она обычно используется для управления областью определения, поэтому вы не получаете много глобальных переменных.

Например, эта функция действует как денежный ящик, она инкапсулирует всю информацию о ваших "деньгах", поэтому вы можете вставлять деньги или получать общие деньги, но вы не можете напрямую вызывать добавление/получение и доступ к переменной.

Он также может использоваться как форма ООП, так как вы уже очень хорошо знакомы с ним

var myMoneyBox = (function() {
    var money = 0;

    function addMoney(x) {
        if (x > 0)
            money += x;
    }

    function getMoney() {
        return money;
    }

    return {
        add: addMoney,
        get: getMoney
    }
})();

myMoneyBox.add(10);
console.log(myMoneyBox.get());
  • 0
    Большое спасибо. Это сделало концепцию намного яснее
1

x присваивается результат вашей функции, как и в любом другом выражении x = f(), вы просто определяете f внутри выражения. Он не имеет возвращаемого значения, поэтому в этом случае значение x не undefined.

Если вы хотите использовать x для вызова функции, просто не добавляйте () в конец выражения...

  • 0
    Может быть многоватым комментарием, но это должен был быть комментарий
  • 4
    Комментарии для уточнения, это фактический ответ. Вы имеете в виду, что ответ настолько прост, что это никогда не должно было быть вопросом, и я согласен.
Показать ещё 3 комментария
0

Я думаю, это может помочь вам:

var x =   function() { 
      for(var x = 0;x<5;x++) {
         console.log(x); 
      } 
   }; 
x();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню