Вы ошибаетесь в предположении, что параметру jsStr
никогда не будет присвоено значение. Обработчики событий всегда вызываются с параметром event
, описывающим только что произошедшее событие. Он содержит поля типа bubbles
, srcElement
и методы типа preventDefault()
.
Итак, этот объект передается в eval
для оценки.
Согласно MDN (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/eval), если eval
передается не строковый аргумент, этот аргумент возвращается без изменений. Таким образом, ваша функция возвращает объект события в jsStr
без изменений.
Теперь некоторые обработчики событий поддерживают возвращаемое значение (например, если вы возвращаете false
из обработчика щелчка элемента <a>
, ссылка не отслеживается). Однако согласно
http://docstore.mik.ua/orelly/webprog/jscript/ch19_01.htm
Обработчик
onload
не изменяет свое поведение в зависимости от возвращаемого значения. Следовательно, этот код в конечном итоге ничего не делает.
Конечно, все это подозревали, но я хотел рассказать вам, можно ли определить jsStr
.