LoginSignup
66
64

More than 5 years have passed since last update.

JavaScipt 初心者が ファ!? となること3つ

Last updated at Posted at 2014-08-12

他の言語と比べて特殊な仕様?であるわりに、入門的な書籍やサイトでも説明がなく、そのうえ既存のJavaScriptソースを読む際に頻出して分かりづらかった点です。

※ まだまだ初心者で学習中なので、補足や指摘があればコメントおねがいします!

即時関数

(function() {
  console.log('hoge');
})();
  • (function(){..})() の書き方は 即時関数 と呼ばれるので、この記述をブラウザが読んだ時点で、実行される。
  • こういう書きかたをするメリット(いまの私の理解)
    • 即時関数の内部で定義したローカル変数や関数を、即時関数の外部から隠蔽できる(グローバル汚染がされない)。

関数の書き方が2つある

パターン①
function hoge(){
  console.log('hoge');
}
パターン②
var hoge = function(){
  console.log('hoge');
};
  • どちらも hoge(); で実行できる。
  • パターン②の方は 無名関数 。つまり関数名が定義されていない。
    • こういう書きかたをするメリット(いまの私の理解)
      • そもそも関数名を定義していないので、その関数名でのグローバル汚染がされない(関数名も変数)
    • 一度しか使わない処理向け。なぜそれなのに関数化するのか、という疑問もあるかもしれないが、関数化すればまとまった処理が書け、且つ、内部で定義したローカル変数等をグローバルから隠蔽できる。

関数自体がオブジェクトである

例えば次のような関数の定義があるとします。

function hoge(){ return "hoge"; }

{..} で囲ってる、つまり、オブジェクトである(いまの私の理解)。 違うらしい

なので、上記は 変数 hoge というオブジェクトを定義している、と言い換えることができるかと思います。

なので、他の関数の引数としてオブジェクトを渡したり、また、次のように別の変数へ代入したりできます。

function hoge(){ return "hoge"; }

var hoge2 = hoge; 
console.log(hoge2());

補足

↓ 下にコメントをくださってる内容の方が、正しい理解です^^;

66
64
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
66
64