スポンサーサイト

2014.01.27 Monday

一定期間更新がないため広告を表示しています

  • -
  • -
  • -

まず無名関数とfunction文の違いなんてあんまり考えてなかったのですが、、
無名関数を使うメリットは何ですか?
この疑問凄い同感!って思ってしまいまして。

確かにfunction文で名前付けるか、
無名関数を変数に代入するかでどっちにしても名前使うじゃん。

そんでちょっと検索して
javascript関数宣言の落とし穴
こちらのブログを見てなんだか難しいなぁと思いつつ考察してみました。

func();//func文
var func = function() {//無名関数を変数に代入
alert('無名func');
};

function func() {//function文
alert('func文');
};
func();//無名func
静的っつーのがピンっとこないのですが、
まぁfunction文は静的に解析されてグローバルオブジェクトか
callオブジェクトのプロパティに設定される。
だから定義前でも呼び出せるということにしておきました。

そんで無名関数は式なので代入時に定義される。
なんとなくわかるような。

そもそもなんで無名関数は無名なのかっつーところが
よくわからなかったのですが、無名関数は=の右側部分で
それを単に変数に代入する例をよく見かけるだけと。
なので無名関数は
変数に入れてもよし(変数名は必要だが)、
頭に(つけて即実行してもよし(これだと名前必要なし)、
その他無名関数のメリットは
関数の引数に使い捨て無名関数を入れる場合(高階関数、コールバック関数)や
(function() {})()や
変数に無名関数を代入する場合(クラス定義、オブジェクトのメソッド定義)など。
これはfunction文ではできないと。
まぁ万能選手ということで納得しました。

それと調べていたら無名コンストラクタってのもでてきましたが
これは何かメリットがあるのでしょうか???
あまり熱く語ってる方がいらっしゃらなかったので忘れます。

それともうひとつ恥ずかしながらしらなかったのが
ifなどの構文内でfunction文は定義できない!!
これ知らないでつまづきました。

var exec = function() {
if(document.getElementById('id')) {
func1();//こっちはエラー
function func1() {
alert('func1');
};
function func2() {
alert('func2');
};
func1();//こっちはOKでした
};
};

こんな書き方するのかしないのかわかりませんが、
通常だと定義前でも呼べたfunction文が
firefoxで構文内だとエラーになりますた。
ちなみに定義後は呼べました。

そこでまた無名関数はどこでも定義OKというこで
var exec = function() {
if(document.getElementById('id')) {
(function() {
func1();//エラーなし
function func1() {
alert('func1');
};
function func2() {
alert('func2');
};
func1();
})();
};
};
とりあえずこんな感じで回避。
まぁ無名関数はメリットが沢山ということで納得してみました。

参考
javascriotの関数をマスターしよう

スポンサーサイト

2014.01.27 Monday

  • -
  • -
  • -

コメント
コメントする








   
この記事のトラックバックURL
トラックバック

calendar

S M T W T F S
   1234
567891011
12131415161718
19202122232425
262728293031 
<< March 2017 >>

profile

last entry:2013/06/10

selected entries

categories

archives

recent comment

search this site.

others