個人的なメモ。
めも。
function hoge() { return alert("Hello World!!") } hoge();
function hoge(str) { return alert(str) } hoge("Hello World!!");
ここあたりは普通。
var hoge = function () { alert("Hello World!!") } hoge();
var hoge = function (str) { return alert(str) } hoge("Hello World!!");
これが関数リテラル。またの名を無名関数。
変数に関数を代入するあたりで素直に頭に入らない人もいるかと思いますが、私もその一人なのでご安心を。
具体的な利用例としては下記のように、ページが完全に読み終わってからalertなんてことが出来ます。
window.onload = function() { return alert("Hello World!!") }
「無名関数なんて使わないで、scriptあたりで書いとけよ」ってのは私も思ったのですが、無名関数のメリットは変数や関数のバッティングを心配しなくていい事です。
以下は単純な無名関数。
グローバルな変数を上書きしていない事に注目。
str = "Hello World!!"; (function(str) { str = "hoge"; return alert(str) }()) alert(str)
以下の場合も変数の上書き、及び関数が外に漏れる事がない。
str = "Hello World!!"; (function(str) { function hoge() { return alert("hoge") } return hoge() }()) alert(str); hoge();
ここまで書いて気がついたのがやってる事は普通の関数と一緒なんすよね。
そりゃそうだろって話ですが、こう考えちゃうのはきっと私の頭の中にオブジェクトの概念がないからとおもいますた。
トイウコトで次回はオブジェクトに関するあれこれ。
・・・実は変数に関数を代入するあたり微妙にオブジェクト指向なんですが、そこはご愛嬌。