Написание анонимной функции дает ошибку - PullRequest
0 голосов
/ 28 апреля 2018

Я пытаюсь сравнить «именованную функцию» с «анонимной функцией», но в простой программе я получаю ошибку. Я все делаю правильно, не знаю, почему приходит ошибка. Может кто-нибудь помочь?

<html>
<head></head>
<body>
<script>

//named Fn
function alpha(){
  alert('hi');
}

//Anonymous Fn
function(){
  alert('hello');
}

//IIFE
(function (){
  alert('good day');
})();

alpha(); 

</script>
</body>
</html>

Я ожидаю, что "хороший день" и "привет" будут предупреждены, но вместо этого получат ошибку.

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

 function(){ <------------------- A function without name.

Ответы [ 3 ]

0 голосов
/ 28 апреля 2018

Вы можете написать анонимную функцию, такую ​​как hello, только как выражение , то есть в месте, где интерпретатор может ожидать значение , например, внутри скобок в качестве аргумента другой функции. В противном случае интерпретатор пытается проанализировать его как функцию объявление (чье имя функции отображается как var) - но без имени это невозможно, потому что нет ничего, что можно извлечь как имя, поднять как переменная, и присвойте.

Решение состоит в том, чтобы просто поместить анонимную функцию в скобки:

//named Fn
function alpha(){
  alert('hi');
}

//Anonymous Fn
(function(){
  alert('hello');
});

//IIFE
(function (){
  alert('good day');
})();

alpha(); 
0 голосов
/ 28 апреля 2018

Вы можете скопировать и вставить код javascript в консоль браузера (инструменты разработчика).

В Firefox вы получите следующую ошибку:

SyntaxError: function statement requires a name [Learn More]

Нажав [Узнать больше], вы будете перенаправлены на соответствующую документацию .

Оператору функции (или объявлению функции) требуется имя, это не будет работать:

function () {
    return 'Hello world';
} // SyntaxError: function statement requires a name

Вместо этого вы можете использовать функциональное выражение (присваивание):

var greet = function() {
    return 'Hello world';
};
0 голосов
/ 28 апреля 2018

Вы не можете объявить анонимную функцию. Вы должны использовать это, когда что-то требует этого. у вас есть:

function(){
  alert('hello');
}

Это всегда будет выдавать ошибку, так как вы не назвали ее. Если вы прикрепите его к чему-то, что подходит для анонимной функции, все будет в порядке. такие как:

setTimeout(function(){
  alert('hello');
}, 500);

Итак, вы модифицированы, и рабочий фрагмент кода будет выглядеть так:

//named Fn
function alpha(){
  alert('hi');
}

//Anonymous Fn
setTimeout(function(){
  alert('hello');
}, 500);

//IIFE
(function (){
  alert('good day');
})();

alpha(); 

Вы также можете просто сделать его IIFE следующим образом:

//named Fn
function alpha(){
  alert('hi');
}

//Anonymous Fn
(function(){
  alert('hello');
})();

//IIFE
(function (){
  alert('good day');
})();

alpha();
...