Рассмотрим следующее:
<a href="javascript:void(fish=document.getElementById('foo').value);void(document.getElementById('bar').value=fish);">With Void</a>
<a href="javascript:fish=document.getElementById('foo').value;document.getElementById('bar').value=fish;">Without Void</a>
<input type="text" id="foo" value="one fish" />
<input type="text" id="bar" value="no fish" />
Первая ссылка поменяет местами значения текстовых полей. Вторая ссылка откроет новую страницу с текстом «одна рыба». Если вы используете javascript: link
, в момент, когда выражение возвращает что-то отличное от null
или undefined
, браузер интерпретирует это как то, что должна делать ссылка. Оборачивая все выражения / оценки в функцию void()
, вы обеспечиваете выполнение всего своего фрагмента кода. В наши дни это в основном используется в Bookmarklets, поскольку использование атрибута onclick
или установка обработчиков событий в отдельных блоках / файлах Javascript - это «норма».
Что касается javascript:
против javascript:void()
, то первое утверждение неоднозначно. Вы говорите: «Эй, я хочу запустить какой-нибудь JavaScript», но тогда вы не предоставляете никакого кода. Не обязательно ясно, что браузер должен делать здесь. Со вторым утверждением вы говорите «эй, запустите некоторый javascript», и ваш код в конечном итоге возвращает undefined, что, как знает браузер, означает «ничего не делать».
Поскольку я здесь, я также укажу, что использование javascript:
или javascript:void();
вышло из-под контроля большинства людей, которые заботятся о разметке. Лучше всего, чтобы ваш обработчик onclick возвращал значение false, а ссылка указывала на страницу / ресурс, который имеет смысл для людей, у которых отключен JavaScript или которые используют блокиратор JavaScript, такой как NoScript.