Как сделать именованую функцию, запускающуюся при объявлении?
Т.е. можно ли
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, время: 10:11. |