ホームページ >ウェブフロントエンド >jsチュートリアル >javascript_javascriptスキルの関数型の詳細説明

javascript_javascriptスキルの関数型の詳細説明

WBOY
WBOYオリジナル
2016-05-16 16:02:001354ブラウズ

関数の種類

関数の型は間違いなく js において非常に重要なものです。

1. これはまずオブジェクトです。つまり、参照型です。ステートメント: それがオブジェクトであると聞くと、その基底クラスがオブジェクトであると錯覚します。

それとオブジェクトは 2 つの独立したものです。関数を入力すると、返されるのはオブジェクトではなく関数です

2. 各関数は Function オブジェクトのインスタンスであり、他の参照オブジェクトと同じプロパティとメソッドを持ちます。オブジェクトなので関数名は関数オブジェクトへのポインタ

関数宣言の構文サポート:

<script>

  //方式1
  function fun(num1,num2){
    return num1+num2;
  }
  
  //方式2
  var fun=function(num1,num2){
    return num1+num2;
  };

  //方式3
  var fun=new Function("n1","n2","return n1+n2");
  
</script>

説明: 関数を宣言するには 3 つの方法がありますが、それぞれ異なります。

メソッド 1 は関数の宣言として理解され、メソッド 2 と 3 は関数式として理解されます。 (方法 3 はコードが 2 回解析されるため、お勧めできません。最初に通常の ECMAScript コードが解釈され、次に受信パラメータが解釈されます。この

記述すると、パラメータの数はN個まで可能ですが、最後のパラメータが関数本体とみなされます)

これが異なる主な理由は、js パーサーが関数宣言と関数式を異なる方法で解析することです。パーサーは最初に関数宣言を読み取り、js エンジンは実行中に関数宣言を実行環境の先頭に自動的に配置します。

関数式は実行時に実際に解釈されて実行されます。これを理解することが重要です!

コードを見てください

<script>
  console.log(typeof fun); //"function"
  console.log(typeof fun2); //"undefined"
  console.log(typeof fun3); //"undefined"
  function fun(n1,n2){
   return n1+n2;
  }
  var fun2=function(n1,n2){
   return n1+n2;
  }
  var fun3=new Function("n1","n2","return n1+n2;");
 </script>

3. 関数がオーバーロードされないのはなぜですか?

この問題はjsの言語特性から考える必要があります。記事 2 で述べたように、関数名は関数オブジェクトへの単なるポインタです。ポインタの概念に基づいて理解すると明確になります。

コード例を見てください:

<script>
  function fun(n1){
   return n1+100;
  }
  function fun(n1){
   return n1+200;
  }
  console.log(fun(1));// 201 
  
  //以上写法在解析后应为
  
  var fun=function(n1){
    return n1+100;
  }
  fun=function(n1){
   return n1+200;
  }
  
  // fun 的引用被覆盖了
  console.log(fun(1));// 201 
 </script>

今日はこれで終わりです。この分野で盲点がある人にとって役立つことを願っています。修正が必要な点がございましたら、コメントを残して修正していただければ幸いです。

以上がこの記事の全内容です。皆さんに気に入っていただければ幸いです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。