jQueryではまりました。簡単に書けば、以下のようなことをやっていたんです。
jQuery(document).ready(function ($) { alert($('div').text()); }());
なにがまずいか、わかりますか?
ぼくはこれに90分も悩んでしまいました。
function () { ... }
に続けて、うっかりと ()
と書いたのが失敗です。
小さなミスなのですが、山ほど問題を起してくれます。まず、JavaScript は call-by-value で評価をしますので、function ($) { ... }()
を評価してから、ready メソッドが起動されます。つまり、DOM の準備が整う前に実行されてしまいます。
さらに、本来は jQuery.ready メソッドは関数には関数を与えなくてはならないのですが、ここでは ()
を無駄に追加しています。この関数は仮引数 $
をもっているのですが、実引数を与えていないから undefined が渡されます。このため2行目の$
が undefined だと怒られます。
首を捻りながら、その直前の行にvar $ = JQuery
と書くとエラーはなくなるのですが、実際には存在しているdiv
要素を取ることができません。
この時点で jQuery のバグを疑ってしまったぼくがバカでした。つまらないミスの原因はたいてい自分にあることを忘れていました。