JavaScript引用タイプFunction実例詳細


本論文の実例は、JavaScript参照タイプFunctionを説明する。皆さんに参考にしてあげます。具体的には以下の通りです。
Functionタイプ
関数はオブジェクトで、関数名はポインタです。各関数はFunctionタイプの例です。関数はオブジェクトですので、関数名は関数オブジェクトを指すポインタです。関数とは結合されません。一つの関数に複数の名前があるかもしれません。

function getSum(a, b) {
  return a + b;
}
alert(getSum(2, 3));//5
var copy = getSum;
alert(copy(2, 3));//5
getSum = null;
alert(copy(2, 3));//5

関数を定義する方法は3つあります。関数宣言、関数式、Functionコンストラクタ。
Functionコンストラクタは、任意の数のパラメータを受信し、前のパラメータは関数のパラメータを列挙し、最後のパラメータは関数体です。一般的にFunctionコンストラクタを使って関数を定義することは推奨されません。

var getSum = new Function("a", "b", "return a + b";

JavaScriptには関数の再ロードという概念がありません。二つの同名の関数を宣言すると、後の関数が前の関数をカバーします。
関数名自体が変数であるため、関数も値として使用できます。パラメータとして関数を伝達するだけでなく、戻り値として関数を使用することもできます。

function callFunction(func, arguments) {
  return func(arguments);
}
function sayHello(name) {
  return "Hello, " + name;
}
var result = callFunction(sayHello, "Alice");
alert(result);//Hello, Alice

①、関数宣言
関数名(パラメータ選択){関数体}
例:

function func1(){//   ,      
  function func() {//   ,       
    ...//   
  }
}

②関数式
function関数名|オプション(パラメータ選択){関数体}
例1:

var fun = function func() {};//   ,         

例2:

new function func(){};//   ,new   

例3:

(function func(){});
//   ,        ――  () ,  ()        

例4:

[function func() {}];//   ,             

例5:

1, function func() {};//   ,         

③関数コンストラクタ
関数コンストラクタが作成した関数の[[Scope]属性は、グローバルオブジェクトのみを含んでいます。

<script>
  var a = 1;
  func1();
  function func1() {
    var a = 2;
    var b = 3;
    var func2 = new Function("alert(a); alert(b);");
    func2();//1,b is not defined
  }
</script>

関数コンストラクタが作成した関数func 2は、大域オブジェクトから変数aを取得できますが、大域オブジェクトにbがないため、エラーが発生しました。bは定義されていません。
関数宣言と関数式の違い
1)関数宣言はコンテキストに入って作成され、コードの実行段階では利用できます。関数式はコードの実行段階で作成されますので、関数宣言は向上できますが、関数式はできません。
関数宣言の昇格:

func();//Function declaration
function func(){
  alert("Function declaration");
}

関数式を上げることはできません。

func();//  :func is not a function
var func = function (){
  alert("Function expression");
}

2)関数宣言は変数オブジェクトVOに影響を及ぼし、すなわちコンテキストVOに格納された変数オブジェクトであり、関数式は変数オブジェクトVOに影響を与えず、変数オブジェクトに存在しない。これは名前によって関数宣言の前に呼び出されたり、宣言の後に呼び出されたりすることができないことを意味する。しかし、再帰的呼び出しでは関数式は名前で自身を呼び出すことができます。
例1:

alert(func); //  :func is not a function。       ,            
(function func() {});
alert(func); //  :func is not a function。        ,         VO 

例2:

(function func(param) {
  if (param) {
    return;
  }
  func(true);//func  ,              
})();
func(); // func is not a function,     

3)関数宣言はプログラムまたは関数の中にしか現れません。if、while、またはfor文などの表現またはブロックには現れません。JavaScriptはブロックレベルのスコープがないので、関数とグローバルスコープだけがあります。式の位置に関数式が現れます。
関数宣言:あるブラウザはifに戻りますが、あるブラウザはelseに戻ります。

if (true) {
  function func() {
    alert('if');
  }
}
else {
  function func() {
    alert('else');
  }
}
func();

関数式:すべてのブラウザがifに戻ります。

var func;
if (true) {
  func = function() {
    alert('if');
  };
}
else {
  func = function() {
    alert('else');
  };
}
func();

もっと多くのJavaScriptに関する内容に興味がある読者は、当駅のテーマを見ることができます。「javascript対象向け入門教程」、「JavaScript常用関数技術のまとめ」、「JavaScriptエラーとデバッグテクニックのまとめ」、「JavaScriptデータ構造とアルゴリズム技術のまとめ」、「JavaScriptはアルゴリズムと技術の総括を遍歴します。」および「JavaScript数学演算の使い方のまとめ
本論文で述べたように、JavaScriptプログラムの設計に役に立ちます。