JavaScriptの無名関数の実行

JavaScriptの実行を無名関数にして、意図しない変数の上書きを防止します。

基本的に、普通に宣言したJavaScriptの変数はグローバルなので、注意しないと意図しない変数の上書きや、エラーが発生することがあります。そのような時には、無名関数化して実行させることでエラーを回避できます。

 書き方

 この書き方をするだけで、varで宣言した変数がローカル変数となり、ほかのJavaScriptが定義した変数を上書きすることが無くなります。

使いどころ

例えば、私が経験した実例としては、Webページのコンテンツのデザイン・制作をA社に依頼して、もらったHTMLにB社のアクセス解析タグを埋め込みました。すると、コンテンツ側もアクセス解析ツールのタグ側もユーザエージェント(OSやブラウザ)の判定結果を同じ変数名の変数に格納しており、競合してエラーになりました。

このような場合、ページ上の他の処理に影響を与えないような書き方をすることが望ましく(特にこの場合はアクセス解析ツール側が)、上記のような無名関数による実行が有効です。

実行例

 上記を実行すると、「num=2」が2回表示されます。決して無名関数内で宣言したnumで上書きされることはありません。もし、5~7行目が無名関数になっていない場合、2回目のalertに影響が出てしまいます。そして、もし、5~7行目がアクセス解析タグの処理の場合、それ以外の部分の本来のページ描画の処理に悪影響を与えることになってしまいます。(サンプルコードが雑ですいません。。。)

このやり方は、いろいろな人が一つのコンテンツに手を加える場合、特にアクセス解析タグのように後から入れることが多いもので有効ですので、私は無名関数化して、画面上の既存の処理に影響を与えないようにしています。(^∀^)


JavaをバージョンアップしたらJMeterが動かなくなった

ある日、これまで問題無く動いていたJMeterがちゃんと動かなくなっていましたので、その時の対処のメモです。

 Javaを8にアップデートしたらJMeterの起動時にコンソールに↓のエラーが出ました。

Java HotSpot(TM) Client VM warning: ignoring option PermSize=64m; support was removed in 8.0
Java HotSpot(TM) Client VM warning: ignoring option MaxPermSize=64m; support was removed in 8.0

JMeter2

エラーメッセージから明らかですが、Java8から「PermSize」「MaxPermSize」のJVMパラメータが無くなっためのようです。

 また、これまでちゃんと動いていたテストシナリオもSSL関連のエラーが出るようになってしまいました。

javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated

JMeter3

 結局、使っているJMeter(今回は2.9)とJava8との相性の問題で、一次的に環境変数PATHをJava7に変更して起動しなおしたら問題なく動きました。

また、JMeterの方を最新(今時点で2.13)にしてJava8で動かしても特にエラーはありませんでした。

しかし、JMeterをバージョンアップするとこれまで作ったJMeterのテスト計画を検証し直すor作り直す必要があるので、今回はJavaを一時的に7に戻しました。(;^_^A