Как сделать именованую функцию, запускающуюся при объявлении?
Т.е. можно ли
var func = function() {...}
var func()
заменить одной строчкой? |
С var и без дублирования - нет.
А так:
(func = function() {alert(new Date())})()
func()
|
Одной строкой, да легко:)
var func = function(){ ... }; func();
|
Точняк! Имя тоже надо было брать в скобки! Второй вариант с подвохом)
Кстати (var func = function() {alert(new Date())})() не работает. Приходится создавать глобальную переменную |
Кстати есть ещё один дюже хитрый вариант(если функция не должна ничего возвращать):
var func = function() {alert(new Date()); return arguments.callee}()
func()
|
var autorun= function( func ){
func.call.apply( func, arguments )
return func
}
var func= autorun( function(){
alert( 1 )
} )
func()
|
var func= (new function( ){
alert( 1 )
}).constructor
func()
|
расслабься, мы не на экзамене
|
Из всех предложенных вариантов я не увидел ни одной именованной функции. Ведь именованные функции объявляются вот так:
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);
Теперь к вопросу: Цитата:
(function named () {
// Ваш код
}());
С виду бесполезная конструкция, но подобную именованную функцию можно вызвать из самой себя, это будет полезно в рекурсии. При этом эта функция не объявляет себя в области видимости в которой она находится (возможно это минус). Ну и если все же нужно сохранить ссылку на эту функцию то Aetae выше уже писал примеры. |
Цитата:
|
Цитата:
они кстати должны работать быстрее обычных функций, особенно в замыкании, но я ещё не проверял. |
Цитата:
|
Цитата:
|
и пошли все выпендриваться кто лучше знает яваскрипт, развернулась дискуссия о тонкостях именования функций, начали сравнивать скорости разных объявлений)
учитесь читать между строк. автор хотел упростить себе жизнь при копипасте. чтобы исправлять имя функции не в двух местах, а только в одном. и ему плевать будет функция именованной или нет. суть вопроса не в том, чтобы проверить ваши академические знания. |
Цитата:
Цитата:
но на практике http://jsperf.com/another-bind-performance-check Цитата:
|
а при чём тут рефакторинг?
|
|
Цитата:
|
Цитата:
|
| Часовой пояс GMT +3, время: 07:32. |