Почему джаваскрипт выполняется сразу после загрузки?

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
ndemidov
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 14.11.2007 (Ср) 16:23
Откуда: Earth planet

Почему джаваскрипт выполняется сразу после загрузки?

Сообщение ndemidov » 29.08.2015 (Сб) 11:18

Вопрос возможно глупый. Добавляем к html-тэгу (jQuery-методом append) html-код, который является javascript'ом. То есть представляет собой <script> ... </script>. Почему он сразу выполняется?
Большинство людей не понимает, что великое многообразие и красочность мира будут служить им крепчайшей душевной поддержкой на протяжении всей жизни. Иван Ефремов

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Почему джаваскрипт выполняется сразу после загрузки?

Сообщение Хакер » 29.08.2015 (Сб) 14:03

А когда должен? Начиная с первого числа следующего месяца?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 31.08.2015 (Пн) 18:15

Это фича jQuery, насколько я знаю. А что именно не устраивает?

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Почему джаваскрипт выполняется сразу после загрузки?

Сообщение iGrok » 31.08.2015 (Пн) 21:45

Qwertiy писал(а):насколько я знаю

Неправильно знаешь.
label:
cli
jmp label

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 01.09.2015 (Вт) 13:08

iGrok писал(а):Неправильно знаешь.

Что именно я знаю неправильно?
http://jsfiddle.net/xyewkzfc/ - нативный вариант на консоль ничего не выводит, хотя тег со скриптом добавляется.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Почему джаваскрипт выполняется сразу после загрузки?

Сообщение iGrok » 02.09.2015 (Ср) 1:53

http://jsfiddle.net/aux9gt0L/

А для чего может понадобиться твой "нативный" вариант (и зачем нужен неисполняющийся js-код, и как его вообще можно использовать) - я не понимаю.
label:
cli
jmp label

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 02.09.2015 (Ср) 18:56

Разница в том, что ты добавляешь элемент, а я - разметку. А у jQuery фича - он делает eval для попавшихся скриптов.
Зачем надо добавлять без выполнения скриптов? Не знаю. Как вариант вот такой код: document.head.innerHTML += "<style>#smth { color: red; }</style>" - предлагаешь все скрипты повторно выполнить?

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Почему джаваскрипт выполняется сразу после загрузки?

Сообщение iGrok » 02.09.2015 (Ср) 23:37

Qwertiy писал(а):Разница в том, что ты добавляешь элемент, а я - разметку.

Да. Но какой в этом смысл?
Хакер правильно спросил - когда же он должен тогда выполняться? В понедельник? Через 42 секунды? Когда юзер наберёт на клавиатуре "абракадабра" и трижды дунет?
Если этот блок не выполнится в момент добавления, он не выполнится никогда, а значит и добавлять его незачем.

Qwertiy писал(а):предлагаешь все скрипты повторно выполнить?

Предлагаю не использовать такой код, а добавлять элемент style в head. И вообще никогда не использовать +=-подход в отношении элементов dom. Это самая что ни на есть bad practice.
label:
cli
jmp label

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 03.09.2015 (Чт) 13:03

iGrok писал(а):Если этот блок не выполнится в момент добавления, он не выполнится никогда, а значит и добавлять его незачем.

Никогда - тоже вариант.
И мало ли, зачем его можно добавить. Как минимум, его можно прочитать потом. А ещё, его можно отобразить: http://jsfiddle.net/xyewkzfc/1/.

iGrok писал(а):Это самая что ни на есть bad practice.

Если что-то является bad practice, это ни капельки не означает, что никто так не делает.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Почему джаваскрипт выполняется сразу после загрузки?

Сообщение iGrok » 04.09.2015 (Пт) 0:40

Qwertiy писал(а):И мало ли, зачем его можно добавить. Как минимум, его можно прочитать потом. А ещё, его можно отобразить: http://jsfiddle.net/xyewkzfc/1/.

Для этого есть масса "штатных" способов. Незачем так извращаться.

Qwertiy писал(а):Если что-то является bad practice, это ни капельки не означает, что никто так не делает.

Ну так пусть не удивляется, что при этом что-то может выполниться дважды. ССЗБ же.
Хотя я, конечно, не проверял, реально ли скрипты выполнятся дважды в таком варианте. По идее, должны.
label:
cli
jmp label

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 04.09.2015 (Пт) 12:28

iGrok писал(а):Хотя я, конечно, не проверял, реально ли скрипты выполнятся дважды в таком варианте. По идее, должны.

Нет, не выполняются и не должны. При изменении разметки через innerHTML и insertAdjacentHTML скрипты в новой разметке не выполняются.
А вот в jQuery решили, что выполнять их всё-таки надо и, похоже, где-то делают eval.

ndemidov
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 14.11.2007 (Ср) 16:23
Откуда: Earth planet

Re: Почему джаваскрипт выполняется сразу после загрузки?

Сообщение ndemidov » 05.09.2015 (Сб) 9:38

Хакер писал(а):А когда должен? Начиная с первого числа следующего месяца?

Просто надо было загрузить скрипт аяксом и выполнить его. И я призадумался, что не знаю как это работает. Предположил - не выполнится ли код при вставке вручную - выполнился. Решил спросить)
Большинство людей не понимает, что великое многообразие и красочность мира будут служить им крепчайшей душевной поддержкой на протяжении всей жизни. Иван Ефремов


Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 7

    TopList  
cron