Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   (function(){бла-бла-бла})() что это означает? (https://javascript.ru/forum/misc/24165-function-%7Bbla-bla-bla%7D-chto-ehto-oznachaet.html)

Livanderiaamarum 20.12.2011 01:17

Цитата:

Сообщение от melky (Сообщение 144633)
нет.

variable_local берётся из сохранённой области видимости корневой функции (самая первая - т.е. анонимная оборачивалка).

т.к. возможно я изрекаюсь слишком заумно, поэтому я кидаю картинку.



PS как мне нравится эта картинка троллфейса.

точно) я прост невнимательно посмотрел.

Livanderiaamarum 20.12.2011 01:18

Цитата:

Сообщение от melky (Сообщение 144633)
PS как мне нравится эта картинка троллфейса.

а у меня батхерд с неё((

Nekromancer 20.12.2011 11:42

Цитата:

Сообщение от trikadin
С одной разницей, ф-ция - анонимна, у неё нет имени, а значит, она не засоряет глобальную область видимости.

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

Так тоже монжо :) Особенно в strict mode так даже правильнее :)

trikadin 20.12.2011 12:22

Цитата:

Сообщение от Nekromancer
Так тоже монжо Особенно в strict mode так даже правильнее

Да я не против)

Nekromancer 20.12.2011 12:50

trikadin,
Ну ты сказал, что она анонимная потому, что у неё нет имени и она потому не засоряет глобальную область.
Она действительно анонимная потому, что имени нету, но не засоряет не потому :)

Иваннн 20.12.2011 13:17

Некромансер., Соглано ecmascript 5.1 идентификатор функции как выражения создается в Lexical enviroment (созданном как часть контекста исполнения выражения (не кода) функции) и по идее не должен быть виден из вне, но твой пример мне не понятен, почему видна "a"!!!! Кстати согласно все то же спецификации
var s=function a(){}

уже замыкание.
Люди, я сам плохо понимаю логику языка, но чтобы пролить свет на нее нужно!!! читать спецификацию, частными примерами очень тяжело понять, что почему происходит.

Nekromancer 20.12.2011 13:37

"a" как раз таки не видна - "error: a is not defined". "a" видна только внутри функции "a", что позволяет использовать её ещё раз внутри вызова - рекурсия. Вместо arguments.callee.

Иваннн 20.12.2011 13:40

Все понял, я упустил, что функция в скобках и первый алерт - ее.

nerv_ 20.12.2011 13:43

Цитата:

Сообщение от Иваннн
но твой пример мне не понятен, почему видна "a"

Я бы лучше спросил, почему она не видна) Результаты вызовов: FF8/Opera10.62 - 1; "error: a is not defined"; IE8 - 1; 1.

Nekromancer 20.12.2011 13:47

nerv_,
http://dmitrysoshnikov.com/ecmascrip...expression-nfe
Внизу написано про баги реализации от Microsoft.


Часовой пояс GMT +3, время: 08:11.