3つの関数定義の仕方とスコープにかんしてmemo

今週の学習メモ。JavaScriptの基礎をひと通りおさらいしたら多々しらないことが出てきて勉強になった。


とくにJSでは自由度が高いため関数が様々な形で使われるためどうもしっくりきていなかった。今回関数の呼び出し方にもだいぶ曖昧だったところの知識が整理され、よりコードを呼んでいるときに意味がとれるようになってきた。

方法としては

・function命令で定義

function hoge(){}

・functionコンストラクタを使う

var hoge = new function (hoo,huga,'return 1 + 1;');

・関数リテラルで定義

var hoge = function(){}

の三つがある。

functionオブジェクトを使う2つめのコンストラクタでの定義はあまり目立ったメリットがなく通常使わないこと、function~は直接だが、関数リテラルは無形関数を変数に定義しているという違いがある模様。

またfunction hoge(){} は静的な定義であって、コードが解析/コンパイルのタイミングで関数登録されている。
funtion ~ で定義。


JavaScriptでの独特なスコープ
Javascriptではローカルのスコープの意味がperlとは違う。具体的には

・ローカル変数とは関数内で定義された変数。その場合その関数の内部をスコープとする。
・スコープ内であれば位置に関係なく変数が呼ばれる。なので先頭に書いてわかりやすくする。
・ブロックレベルのスコープがない。if分の{}内はスコープにならない。関数のブロックだけがローカルになる。

トリッキーな方法としてwithをつかった擬似的なブロックスコープは生成できるようだがあんまり使うものではないみたい。