onclickの処理でonclickそのものを変更しようとしたけれど

javascriptを書いていて、様々な諸事情からonclickの処理内容をそのonclickで変更したいと思ったのです。

具体的には次のような感じ。

<a onclick="this.outerHTML = this.outerHTML.replace(/true/g, 'false'); if(true)alert('aaaaa');">リンク</a>

このリンクをクリックしたらどうなるかというと、アラートが表示されます。つまり、if文の条件式はtrueのままだったというわけです。

ですが、アラートが表示された後にこのaタグを確認してみると、

<a onclick="this.outerHTML = this.outerHTML.replace(/false/g, 'false'); if(false)alert('aaaaa');">リンク</a>

のように変わっています(replaceのtrueまで変わってしまっていますが)。

もちろんこれをクリックしてもアラートは出てきません。

 

ようするに、onclickはイベントが発火した時点で実行内容が確定されており、その実行中に実行内容を変えることはできない、ということのようです。