Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.12.2012, 08:27
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

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

заменить одной строчкой?
Ответить с цитированием
  #2 (permalink)  
Старый 07.12.2012, 08:58
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

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

Последний раз редактировалось Aetae, 07.12.2012 в 09:01.
Ответить с цитированием
  #3 (permalink)  
Старый 07.12.2012, 09:55
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 30.03.2010
Сообщений: 1,813

Одной строкой, да легко
var func = function(){ ... }; func();
__________________
.
Ответить с цитированием
  #4 (permalink)  
Старый 07.12.2012, 10:02
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

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

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

Последний раз редактировалось Shitbox2, 07.12.2012 в 10:11.
Ответить с цитированием
  #5 (permalink)  
Старый 07.12.2012, 23:41
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

Кстати есть ещё один дюже хитрый вариант(если функция не должна ничего возвращать):
var func = function() {alert(new Date()); return arguments.callee}()
func()
__________________
29375, 35
Ответить с цитированием
  #6 (permalink)  
Старый 08.12.2012, 23:03
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

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

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

func()
__________________
.ня
Ответить с цитированием
  #7 (permalink)  
Старый 08.12.2012, 23:10
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

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

func()
__________________
.ня
Ответить с цитированием
  #8 (permalink)  
Старый 09.12.2012, 01:33
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

расслабься, мы не на экзамене
__________________
.ня
Ответить с цитированием
  #9 (permalink)  
Старый 09.12.2012, 04:08
Аватар для Magneto
Люмус, Емаксос Developer!
Отправить личное сообщение для Magneto Посмотреть профиль Найти все сообщения от Magneto
 
Регистрация: 06.05.2010
Сообщений: 677

Из всех предложенных вариантов я не увидел ни одной именованной функции. Ведь именованные функции объявляются вот так:
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 выше уже писал примеры.
Ответить с цитированием
  #10 (permalink)  
Старый 09.12.2012, 10:51
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от iMaxmaxmaximus
Есть 2 вида функций, декларированные и выраженные.
и забинденные. они - самые магические в JavaScript штуки.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При выборе в select выдает число. Как сделать? где почитать? Bakstor Общие вопросы Javascript 5 21.11.2011 15:35
Как запустить функцию при отображении элемента в окне браузера? Kostushko Events/DOM/Window 6 27.09.2010 11:03
Как при чтении или записи свойства объекта вызывать функцию danik.js Общие вопросы Javascript 3 16.09.2010 17:57
Как сделать? При выходе мышкой за пределы окна браузера, начинает грузится другая стр alb Events/DOM/Window 13 01.09.2010 12:19
30(1|2) редирект от сервера. Или как лучше сделать редирект при верной отсылке форма. pizzZ AJAX и COMET 2 18.02.2010 09:06