LINUX.ORG.RU

Странное поведение javascript при передаче в листенер имени функции

 


0

1
<a id="link">test</a>
document.getElementById("link").addEventListener('click', function(){console.log('click')});
function test(){console.log('test')};
document.getElementById("link").addEventListener('click', test)

Результат клика:

click
test 

Переопределяю функцию test

function test(){console.log('test1')};

Результат клика:

click
test 

Как с этим бороться?

★★★★★

Ответ на: комментарий от Hater

Знаю что можно так, но это вопрос не столько про разработку сколько про отладку. Раньше я просто переопределял функцию и мог играться с ней в отладчике а вчера обнаружил что такой способ теперь не работает.

ya-betmen ★★★★★
() автор топика
Ответ на: комментарий от ya-betmen

Раньше - это где и как? Вполне логичное поведение движка, ведь ты передаёшь test по ссылке, а потом ссылку переводишь на вновь созданную функцию.

Hater ★★
()
Ответ на: комментарий от Hater

Ну в прошлом году (может пораньше) так отлаживался в хроме или фф, не помню уже. Поэтому и удивился что сейчас не получилось ни там ни там.

Хотя я возможно что-то напутал. А есть способ поменять ссылку на функцию?

ya-betmen ★★★★★
() автор топика
Последнее исправление: ya-betmen (всего исправлений: 1)

Биндер использует указатели, а не имена.

anonymous
()

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

Deleted
()

Потому что в addEventListener передается не имя тест, а его значение. На клик отрабатывает скомпилированное говно, которое туда записалось, ни о каком имени test механизм обработки события не знает. Этот вопрос, тащемта, эквивалентен такому:

a=1
b=a
a=2
console.log(b) // 1 почему тут внезапно не 2?
Все дело в волшебных пузырьках энергичных вычислениях.

terminator-101
()
Ответ на: комментарий от terminator-101

Какой же он верный, если не работает? Also, передача функции и имени этой функции это таки разные вещи. Можно ещё и по имени звать, например, если хочется безумия, но зачем? :}

Deleted
()
Ответ на: комментарий от Deleted

Какой же он верный, если не работает?

Все там работает, не надо пургу гнать.

Можно ещё и по имени звать, например

Это как?

terminator-101
()
Ответ на: комментарий от Deleted

Also, передача функции и имени этой функции это таки разные вещи.

В каком смысле разные? С точки зрения работы кода — одинаковые. Ты о чем вообще? Не похмелился? У тебя три ошибки, мля, в одном предложении.

terminator-101
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.