JavaScriptという挙動が直感的じゃなくて時々ハマるのでメモ。JavaScriptの関数では変数宣言はどこでもできて、どこで宣言しても関数の頭から有効になるという特徴を持っている。JavaScriptはブロックスコープを持たないという事柄と一緒に紹介されることが多い。挙動を単純なサンプルコードで検証してみる宣言されてない変数を使おうとするとエラーになるが、宣言されていれば内容が未定義でもエラーにはならない。いう原則を踏まえて変数宣言の挙動を見てみる。ちなみに直接関係ないがNode.jsのコンソールがあるとこういうちょっとした検証に便利だ。y;}f();これを実行すると4ではなくNaNが返る。クロージャで関数外部の変数にアクセスしているつもりが、関数内部の変数を未定義のまま使ってしまうと言う状況。4行目のvarで関数内のyが宣言されているため、同じ関数内ではそちらのyが使われる。(JavaScriptのスコープチェーンを知っていると理由が理解できる)例が簡単なので、いくらなんでもこんなコードだれも書かないだろうが、それぞれの行の間に別の複雑な処理が挟まっていたとしたら?うっかり同じ名前の変数を定義してしまい、罠にはまることは誰にでもありそうだ。この変数宣言の特徴を知っていればまだすぐに原因がわかるのでいいが、知らない場合は解決のためにとてつもなく長い旅に出る羽目になるかもしれない。羽目になりましたとも。変数宣言のベストプラクティス混乱を避けるために先頭でまとめて宣言するというのがジャスティス。他の多くの言語だと使う直前に宣言するのが一般的だけど、JavaScriptではそれは非推奨。「良いパーツ」によるベストプラクティス実践的な要点がまとまった非常にいい本。他の言語の経験のある開発者がJavaScriptに手を出す際には是非の是非にオススメ。電子書籍にもなってる。ここのところはまりどころにつまずいては、確かこの本に書いてあったな、と思い出してページをめくり直す日々です。第5版JavaScriptに関する基本がしっかりまとまっている本。こちらも分からないことがあると都度読み返して参考にしている。readerのフィード追加画面っぽいUIを作りたいなぁ、と思ってGoogle先生に聞いてみると次のページを紹介された。ユーザビリティWebViweに表示されているHTMLからTitaniumの処理を実行するObjective-CではUIWebViewDelegateを使うとHTML内のリンクをクリックした時にアプリ内のネイティブな処理を実行する事ができた。Titaniumでも同じ事ができる。Ti.includeではなくrequireを使えば以下の黒魔術は必要ない。あとAndroidでは元々このインクルードパスの問題はないそうだ。Titanium検索:書いてる人サーバーサイドのインフラ構築とプログラミングをたしなむハーフスタックくらいのフリーランスプログラマー。カメラはペンタックス。