Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как сделать именованую функцию, запускающуюся при объявлении? (https://javascript.ru/forum/misc/33760-kak-sdelat-imenovanuyu-funkciyu-zapuskayushhuyusya-pri-obyavlenii.html)

Shitbox2 07.12.2012 08:27

Как сделать именованую функцию, запускающуюся при объявлении?
 
Т.е. можно ли
var func = function() {...}
var func()

заменить одной строчкой?

Aetae 07.12.2012 08:58

С var и без дублирования - нет.
А так:
(func = function() {alert(new Date())})()
func()

Skipp 07.12.2012 09:55

Одной строкой, да легко:)
var func = function(){ ... }; func();

Shitbox2 07.12.2012 10:02

Точняк! Имя тоже надо было брать в скобки! Второй вариант с подвохом)

Кстати (var func = function() {alert(new Date())})() не работает. Приходится создавать глобальную переменную

Aetae 07.12.2012 23:41

Кстати есть ещё один дюже хитрый вариант(если функция не должна ничего возвращать):
var func = function() {alert(new Date()); return arguments.callee}()
func()

tenshi 08.12.2012 23:03

var autorun= function( func ){
    func.call.apply( func, arguments )
    return func
}

var func= autorun( function(){
    alert( 1 )
} )

func()

tenshi 08.12.2012 23:10

var func= (new function( ){
    alert( 1 )
}).constructor

func()

tenshi 09.12.2012 01:33

расслабься, мы не на экзамене

Magneto 09.12.2012 04:08

Из всех предложенных вариантов я не увидел ни одной именованной функции. Ведь именованные функции объявляются вот так:
function named () {};


Есть 2 вида функций, именованные и анонимные. Именованная функция видна везде (везде в области видимости), а анонимная - только после объявления. Почитать в учебнике.

Есть еще одно отличие в этих функциях, и кажется это отличие как раз и послужило названием для этих типов функций (именованные и анонимные).
//    Объявляем именованную функцию с именем named и интерпретатор сам
//    положит ее в переменную named 
function named () {
};


//    Объявляем неименованную функцию и ложим ее в переменную  noNamed 
var noNamed = function () {
};


//    Объявляем именованную функцию с именем ohoho и ложим ее в переменную wtf
var wtf = function ohoho () {
};

alert(named.name);
alert(noNamed.name);
alert(wtf.name);


Теперь к вопросу:
Цитата:

Сообщение от Shitbox2
Как сделать именованую функцию, запускающуюся при объявлении?

Например вот так:
(function named () {
    //    Ваш код
}());


С виду бесполезная конструкция, но подобную именованную функцию можно вызвать из самой себя, это будет полезно в рекурсии. При этом эта функция не объявляет себя в области видимости в которой она находится (возможно это минус).

Ну и если все же нужно сохранить ссылку на эту функцию то Aetae выше уже писал примеры.

melky 09.12.2012 10:51

Цитата:

Сообщение от iMaxmaxmaximus
Есть 2 вида функций, декларированные и выраженные.

и забинденные. они - самые магические в JavaScript штуки.


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