2016-08-09 5 views
-1

Мне показалось, что я понял природу вымышленных выражений функции (IIFE), но теперь я понимаю, что нет.Область названного имени IIFE

Я создал IIFE в куске кода (на веб-странице, используя JQuery, как это бывает). Однако, если я называю эту функцию и пытаюсь вызвать эту функцию из охватывающей области, я получаю «неопределенную» ошибку?

Живой код ведет себя по-разному в IE11 и Firefox 38, что делает вещи еще более запутанными. Тем не менее, я создал простой тест JSfiddle здесь-

https://jsfiddle.net/ktqq4uat/

и это согласуется между браузерами.

Я думал, что эти две линии-

(function myFunction2() { 
    ... 

    (myFunction3= function() { 
    ... 

были в значительной степени эквивалентны, но я получаю неопределенную ошибку «myFunction2» только.

Я оценил бы некоторую помощь understanding-

1) Почему (функция myFunction2() {... скрывается имя функции, а также его внутренняя сфера. Какова область этого имени?

2) Почему myFunction2 и myFunction3 выше ведут себя по-другому.

Rgds

+0

IIFE - это функция, заключенная в круглые скобки и недоступная вне их. Хотя вы можете называть их внутри. – Rajesh

+0

Вы не можете выполнить 'testObject.newFunction2 = myFunction2;', его не видно за пределами –

+0

Что, IE11 все еще не исправил эту ошибку IE6? – Bergi

ответ

0

Названные функции выражения только создать переменную, которая:

  • имеет то же имя, что и функция
  • имеет значение, которое является ссылкой на эту функцию

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

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

Смежные вопросы