関数

JavaScript入門

 
■概要
 
functionで関数の宣言をし、returnを利用して結果を戻します。

function getSum(x, y) {
 var sum = x + y;
 return sum;
}

呼び出し時は下記のようにします。

getSum(5, 10);

 
■関数の範囲
JavaScriptは、関数の内部で宣言した変数を関数の外部で使うことができません。
また、関数内に関数を宣言することもできますが、同じく関数の外部で使うことはできません。

function testFunc() {
 var testVar = 10;
 return testVar;
}
console.log( testFunc() ); // 10
console.log( testVar); // undefined

function mainFunc() {
 var mainVar = ‘a’;

 function subFunc() {
  var subVar = ‘b’;
  console.log(mainVar); // a
  console.log(subVar); // b
 }
 subFunc();

 console.log(mainVar); // a
 console.log(subVar); // undefined
}
mainFunc();

 
■first-class object
JavaScriptの関数はfirst-class object(citizen)で扱いされます。
 
first-class objectとは、以下の条件を満たすオブジェクトを示します。

  • 変数やデータを構造内に含むことが出来ます。
  • パラメーターで値を渡すことが出来ます。
  • 戻り値(return value)で使うことが出来ます。
  • 割当に使われた名前と関係ずに区別が出来ます。
  • 動的にプロパティの割当が出来ます。
  •  
    JavaScriptは、関数もオブジェクトとして扱われるので、次のような宣言も可能になります。

    var testFunc = function (x, y) {
     return x + y;
    };
    // 関数を作って testFunc 変数に代入

    testFunc(3, 5);

    下記のように関数で関数を返還することも可能になります。

    function test(x) {
     var inner = function(y) {
      return x + y;
     };
     return inner;
    }

    test(3)(4); // 7 返還

    関数をオブジェクトのプロパティとして使うことも可能になります。

    var prop = {
     ’age’: 20,
     ’run’: function() {
      alert(‘run prop!’);
     },
     ’bye’: function() {
      alert(‘bye prop’);
     },
    };

     
    ■即時実行関数
    JavaScriptでは、ネームスペースの概念がありません。
    しかし、関数の範囲概念とfirst-class object概念を利用すると似たようなことが実装できます。

    (function () {
     var x = 10;
     var y = 20;
     console.log(x + y); // 30
    })();

    console.log(x); // undefined

    上記コードは、即時実行を可能とするものです。
    上記のコードを分かりやすく書くと下記のようになります。

    var nowFunc = (function() {
     var x = 10;
     var y = 20;
     console.log(x + y); // 30
    });
    nowFunc();

    変数に割り当てて再実行せず、即時に実行する方法です。
    変数や関数を外部から使えなくしたり、衝突をしないようにするために使う方法です。
     
    下記のような書き方もできます。

    (function (b) {
     b.getElementById(‘id’);
     …
    })(document.body);

     
     
     
     

    当サイトは広告を含めています。広告のクリックによる収益は全て当サイトの管理、維持、コンテンツ製作に使われます。

     

    Team ladybird
    タイトルとURLをコピーしました