Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 19.09.2014, 12:24
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

Сообщение от petya
И главный вопрос, таки, остается открытым. Каково непосредственное НАЗНАЧЕНИЕ function declaration?
объявление функции с доступом к ней в любом месте кода, как после объявления, так и до объявления.
Сообщение от petya
пользователь не обязан постоянно думать
поднятый вами вопрос не заставляет особо думать. Это на уровне механики. Нужен доступ к функции везде в области видимости - Function Declaration. Нужен доступ только после объявления - Function Expression.
Конструкции if не создают свою область видимости, поэтому код
foo()
if(false) function foo(){console.log("foo")}
не скрывает foo() в условии. Неужели это нужно разжевывать еще тщательнее? Если бы использовали Function Expression в этом коде, то функция не была бы объявлена, так как до нее не дошел бы код.
Извините, я потерял интерес к дальнейшему диалогу в этой ветке.
Ответить с цитированием
  #12 (permalink)  
Старый 19.09.2014, 12:31
Аспирант
Посмотреть профиль Найти все сообщения от petya
 
Регистрация: 02.09.2014
Сообщений: 77

Сообщение от ВЕТЕРАН
Конструкции if не создают свою область видимости, поэтому код
Причем тут область видимости?
Практически во всех языках if обладает свойством ЛЕНИВОСТИ. ОН НЕ ДОЛЖЕН выполнять код, если условие не совпадает. В нашем же случае, семантически, он выполняет его или не выполняет в зависимости от погоды на марсе.
Ответить с цитированием
  #13 (permalink)  
Старый 19.09.2014, 12:36
Аспирант
Посмотреть профиль Найти все сообщения от petya
 
Регистрация: 02.09.2014
Сообщений: 77

Сообщение от ВЕТЕРАН
объявление функции с доступом к ней в любом месте кода, как после объявления, так и до объявления.
Повторяю: ЗАЧЕМ РЕАЛЬНО это нужно?
Ответить с цитированием
  #14 (permalink)  
Старый 19.09.2014, 12:39
Аспирант
Посмотреть профиль Найти все сообщения от petya
 
Регистрация: 02.09.2014
Сообщений: 77

Сообщение от ВЕТЕРАН
потерял интерес к дальнейшему диалогу в этой ветке.
Видимо потому, что по существу возразить нечего.
Ответить с цитированием
  #15 (permalink)  
Старый 19.09.2014, 13:44
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

petya,
Рельно это нужно для того чтобы функция знала как её зовут и могла что-то с собой делать.

var trololo = function () {alert(arguments.callee.name)};
trololo()


function trololo() {alert(arguments.callee.name)}
trololo();


В чисто конкретном месте я использовал это для обертки над классами (чтобы в консоли у объектов были нормальные имена) и для модуля логгера, который мог вывести всю цепочку наследования моего класса
(Например он вывадил "Base.Module.UserEventManager")

Последний раз редактировалось tsigel, 19.09.2014 в 13:49.
Ответить с цитированием
  #16 (permalink)  
Старый 19.09.2014, 14:18
Аспирант
Посмотреть профиль Найти все сообщения от petya
 
Регистрация: 02.09.2014
Сообщений: 77

tsigel, НЕТ

var trololo = function trololo () {console.log(arguments.callee.name)};
trololo()
Ответить с цитированием
  #17 (permalink)  
Старый 19.09.2014, 14:34
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Сообщение от petya Посмотреть сообщение
tsigel, НЕТ

var trololo = function trololo () {console.log(arguments.callee.name)};
trololo()
И что это должно значить?

trololo()
var trololo = function trololo () {console.log(arguments.callee.name)};
trololo()
Ответить с цитированием
  #18 (permalink)  
Старый 19.09.2014, 14:39
Аспирант
Посмотреть профиль Найти все сообщения от petya
 
Регистрация: 02.09.2014
Сообщений: 77

tsigel,
Это значит, что имя функции это одно, а function declaration -- совершенно другое. Не по теме твой пример.
Ответить с цитированием
  #19 (permalink)  
Старый 19.09.2014, 14:54
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

petya,
Ну если это разные вещи и я говорю не по теме, то попробуй создать функцию с одинаковым именем переменной и самой функции так, чтобы она была объявлена в условии. И если условие не выполнится то функции не должно быть.
Ответить с цитированием
  #20 (permalink)  
Старый 19.09.2014, 15:14
Аспирант
Посмотреть профиль Найти все сообщения от petya
 
Регистрация: 02.09.2014
Сообщений: 77

tsigel,

if(0)foo=function foo(){}
console.log(foo)//error
Ответить с цитированием
Ответ



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

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