Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как сделать чтобы функция не создавалась (https://javascript.ru/forum/misc/56085-kak-sdelat-chtoby-funkciya-ne-sozdavalas.html)

AntonMs 29.05.2015 06:37

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

a()

KosBeg 29.05.2015 07:59

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

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

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

alert(a()); // алерт для наглядности, чтобы не смотреть в консоль

ksa 29.05.2015 08:27

Цитата:

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

Таки не объявлять ее... ;)

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

indeterm 29.05.2015 11:21

Цитата:

Сообщение от AntonMs
почему

Это баг by design. Компиляция осуществляется за 2 прохода, в первом проходе function declarations какбы вытаскиваются наружу, не глядя на окружение. Это может вести к куче трудноуловимых ошибок, указанная Вами -- далеко не единственная. Причем, разные движки могут вести себя по-рзному. Поэтому, лучше их вообще избегать. пишите всегда а=function(){}.

tsigel 29.05.2015 11:31

https://learn.javascript.ru/function...ion-expression
Читайте, там все написано.

indeterm 29.05.2015 11:35

tsigel,
ИЧСХ, статья, указанная Вами начинается с бреда:
Цитата:

В JavaScript функция является значением, таким же как строка или число.
Для справки: В js функция является объктом.

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

И в той части, которая обсуждается, нет никакого противоречия с вашей бульварной статейкой
Цитата:

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

tsigel 29.05.2015 11:44

indeterm,
да, функция объект. не спорю, но статья по крайней мере отражает стандарты спецификации, а вы пишете бред, потому как каждый движок может интерпретировать код по свойму (в 1, 2 или 100 проходов как угодно), лишь бы поведение кода соответствовало стандартам, и все движки отрабатывают в соответствии со стандартами. Так что ваши "куче трудноуловимых ошибок" - либо незнание стандарта, либо не понимание как работает javascript.

indeterm 29.05.2015 12:03

Цитата:

Сообщение от tsigel
потому как каждый движок может интерпретировать код по свойму

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

tsigel 29.05.2015 12:10

Цитата:

Сообщение от indeterm
а интерпретация деклраций зависит от погоды на марсе

Именно этот кусок мне и не понравился потому как это не так. Эти выражения работают всегда одинаково, именно об этом я и писал. Что не важно как движок читает код, важно как он отрабатывает, а отрабатывает он по стандартам и всегда одинаково.

indeterm 29.05.2015 12:14

Цитата:

Сообщение от tsigel
Именно этот кусок мне и не понравился потому как это не так. Эти выражения работают всегда одинаково,

А мне не нравится, что Вы рассуждаете о том, о чем не имеете представления. Запустите код тса в FF и убейтесь апстену удивитесь.

tsigel 29.05.2015 12:28

indeterm,
Да, в условиях ff жгет, я знаю. В этом я не прав.


Часовой пояс GMT +3, время: 22:34.