Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.05.2015, 06:37
Аватар для AntonMs
Профессор
Отправить личное сообщение для AntonMs Посмотреть профиль Найти все сообщения от AntonMs
 
Регистрация: 25.01.2015
Сообщений: 163

Как сделать чтобы функция не создавалась
Объясните пожалуйста почему в консоли 1 и как сделать чтобы функция не создавалась?
if(false){
function a(){console.log('1')}
}

a()
Ответить с цитированием
  #2 (permalink)  
Старый 29.05.2015, 07:59
Аватар для KosBeg
Профессор
Отправить личное сообщение для KosBeg Посмотреть профиль Найти все сообщения от KosBeg
 
Регистрация: 22.05.2015
Сообщений: 384

а вы уверены что в консоли "1" ?

PS: можно юзать анонимные функции

if(false){
  (function(){
    alert('1');
  })();
};

alert(a()); // алерт для наглядности, чтобы не смотреть в консоль
Изображения:
Тип файла: jpg 2015-05-29_075754.jpg (44.3 Кб, 5 просмотров)

Последний раз редактировалось KosBeg, 29.05.2015 в 08:05.
Ответить с цитированием
  #3 (permalink)  
Старый 29.05.2015, 08:27
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от AntonMs
как сделать чтобы функция не создавалась?
Таки не объявлять ее...

if(false){
	a=function(){alert('1')};
};
Ответить с цитированием
  #4 (permalink)  
Старый 29.05.2015, 11:21
Аспирант
Отправить личное сообщение для indeterm Посмотреть профиль Найти все сообщения от indeterm
 
Регистрация: 26.05.2015
Сообщений: 43

Сообщение от AntonMs
почему
Это баг by design. Компиляция осуществляется за 2 прохода, в первом проходе function declarations какбы вытаскиваются наружу, не глядя на окружение. Это может вести к куче трудноуловимых ошибок, указанная Вами -- далеко не единственная. Причем, разные движки могут вести себя по-рзному. Поэтому, лучше их вообще избегать. пишите всегда а=function(){}.
Ответить с цитированием
  #5 (permalink)  
Старый 29.05.2015, 11:31
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

https://learn.javascript.ru/function...ion-expression
Читайте, там все написано.
Ответить с цитированием
  #6 (permalink)  
Старый 29.05.2015, 11:35
Аспирант
Отправить личное сообщение для indeterm Посмотреть профиль Найти все сообщения от indeterm
 
Регистрация: 26.05.2015
Сообщений: 43

tsigel,
ИЧСХ, статья, указанная Вами начинается с бреда:
Цитата:
В JavaScript функция является значением, таким же как строка или число.
Для справки: В js функция является объктом.

Кстати, это не функциональное выражение, а декларация.

И в той части, которая обсуждается, нет никакого противоречия с вашей бульварной статейкой
Цитата:
Основное отличие между ними: функции, объявленные как Function Declaration, создаются интерпретатором до выполнения кода.
Вы хоть читайте для приличия, на что ссылаетесь.

Последний раз редактировалось indeterm, 29.05.2015 в 11:39.
Ответить с цитированием
  #7 (permalink)  
Старый 29.05.2015, 11:44
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

indeterm,
да, функция объект. не спорю, но статья по крайней мере отражает стандарты спецификации, а вы пишете бред, потому как каждый движок может интерпретировать код по свойму (в 1, 2 или 100 проходов как угодно), лишь бы поведение кода соответствовало стандартам, и все движки отрабатывают в соответствии со стандартами. Так что ваши "куче трудноуловимых ошибок" - либо незнание стандарта, либо не понимание как работает javascript.
Ответить с цитированием
  #8 (permalink)  
Старый 29.05.2015, 12:03
Аспирант
Отправить личное сообщение для indeterm Посмотреть профиль Найти все сообщения от indeterm
 
Регистрация: 26.05.2015
Сообщений: 43

Сообщение от tsigel
потому как каждый движок может интерпретировать код по свойму
Я как раз об этом сказал. Вы ударились в демагогию, не хочу продолжать. Суть моего поста в том, что выражения всегда интерпретируются однозначно, а интерпретация деклраций зависит от погоды на марсе, в основном (в том числе, от вольной интерпретации стндарта и оригинального понимания семантики производителями движков)

Последний раз редактировалось indeterm, 29.05.2015 в 12:06.
Ответить с цитированием
  #9 (permalink)  
Старый 29.05.2015, 12:10
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Сообщение от indeterm
а интерпретация деклраций зависит от погоды на марсе
Именно этот кусок мне и не понравился потому как это не так. Эти выражения работают всегда одинаково, именно об этом я и писал. Что не важно как движок читает код, важно как он отрабатывает, а отрабатывает он по стандартам и всегда одинаково.
Ответить с цитированием
  #10 (permalink)  
Старый 29.05.2015, 12:14
Аспирант
Отправить личное сообщение для indeterm Посмотреть профиль Найти все сообщения от indeterm
 
Регистрация: 26.05.2015
Сообщений: 43

Сообщение от tsigel
Именно этот кусок мне и не понравился потому как это не так. Эти выражения работают всегда одинаково,
А мне не нравится, что Вы рассуждаете о том, о чем не имеете представления. Запустите код тса в FF и убейтесь апстену удивитесь.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать, чтобы при вводе числа в поле добавлялись разделители групп разрядов? Hurray Элементы интерфейса 13 18.02.2015 14:07
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
как сделать так чтобы в popup окне принимался css стили,? sarik Общие вопросы Javascript 2 12.03.2013 10:24
Как сделать чтобы менялся background в раскрывающемся меню Teotim Элементы интерфейса 2 20.10.2012 20:28
Как сделать чтобы у textarea увеличивался rows с каждой новой строчкой rusbody Общие вопросы Javascript 1 19.03.2011 16:43