ホームページ ウェブフロントエンド jsチュートリアル JavaScript 関数式 (グラフィック チュートリアル)

JavaScript 関数式 (グラフィック チュートリアル)

May 19, 2018 am 10:52 AM
javascript js 表現

この記事では主に JavaScript 関数式の詳しい説明と例を紹介しますので、必要な方は参考にしてください

JavaScript 関数式

1. 順序

関数を定義するには 2 つの方法があります。は関数宣言、もう 1 つは関数式です。

1.1 関数宣言

function functionName(arg){
   //函数体
}
ログイン後にコピー

関数宣言について、重要な機能は関数宣言のホイスティングです。これは、コード ステートメントを実行する前に関数が読み取られることを意味します。これは、関数を呼び出すステートメントの後に関数を配置できることを意味します。以下に示すように:

helloworld(); //在代码执行之前会先读取函数声明
function helloworld(){
  console.log("hello world");
}
ログイン後にコピー

1.2 関数式

var functionName=function(arg){
   //函数体
}
ログイン後にコピー

この形式は、通常の変数代入ステートメントのように見えます。つまり、関数を作成して変数 functionName に代入します。この場合に作成される関数を無名関数と呼びます。 function キーワードの後に​​識別子がないためです。

関数式は、他の式と同様に、使用する前に値を割り当てる必要があります。次のコードではエラーが発生します。関数式を使用すると、関数式に値を動的に割り当てることができます。次のコード:

helloworld(); //错误,还未赋值,函数不存在

var helloworld=function(){
  console.log("hello world");
}
ログイン後にコピー

2. 再帰関数

再帰関数は、関数がそれ自体を名前で呼び出すときに形成されます (C# や他の言語と同じなので、プログラムの中心的な考え方は次のとおりです)似ていますが、文法にはいくつかの違いがあります。1 つの言語の基本をよく学べば、他の言語を学ぶのがはるかに簡単になります。一連の数字のルールは次のとおりです。 1, 2, 3, 5, 8, 13, 21 , 34... 30 番目の桁を検索し、再帰アルゴリズムを使用します。コードは次のとおりです:

var helloworld; //声明
if(condition){ //条件
  helloworld=function(){ //赋值
    console.log("hello world"); 
  }
}
else{
  helloworld=function(){ //赋值
    console.log("你好,世界");
  }
}
ログイン後にコピー

この関数には問題がないように見えますが、次のコードは問題を引き起こす可能性があります:

   function foo(n) {
      if (n <= 0)
        return 0;
      else if (n > 0 && n <= 2)
        return 1;
      else
        return foo(n - 1) + foo(n - 2);
    }
ログイン後にコピー

上記のコードは、最初に foo() 関数を変数 foo1 に保存し、次に foo 変数を null に設定します。その結果、への参照は 1 つだけになります。本来の機能。しかし、次に foo1() を呼び出すと、foo() を実行する必要があり、foo はすでに null であるため、エラーが発生します。この場合、arguments.callee を使用すると、この問題を解決できます。 argument.callee は実行される関数へのポインターなので、これを使用して関数への再帰呼び出しを実装できます

   var foo1 = foo;
    foo = null;
    console.log(foo1(34));
ログイン後にコピー

また、名前付き関数式を使用して同じ結果を達成することもできます。例:

 function foo(n) {
      if (n <= 0)
        return 0;
      else if (n > 0 && n <= 2)
        return 1;
      else
        return arguments.callee(n - 1) + arguments.callee(n - 2);
    }
ログイン後にコピー

3. クロージャ

3.1 クロージャは、別の関数のスコープ内の変数にアクセスできる関数を指します。クロージャを作成する一般的な方法は、関数内に別の関数を作成することです。 。 機能。クロージャを理解するには、まず JavaScript の特殊変数のスコープを理解する必要があります。変数のスコープは、グローバル変数とローカル変数の 2 種類にすぎません。次に、それを直感的に表現するためにいくつかのデモを作成します。

グローバル変数は関数内で直接読み取ることができます。変数は関数の外で直接読み取ることはできません:

 var foo = (function f(n) {
      if (n <= 0)
        return 0;
      else if (n > 0 && n <= 2)
        return 1;
      else
        return f(n - 1) + f(n - 2);
    });
ログイン後にコピー

ここで注意すべき点は、関数内で変数を宣言するときは var を使用する必要があり、使用しない場合はグローバル変数になります:

 var n = 100; //定义一个全局变量
    function fn() {
      console.log(n); //函数内部直接读取全局变量
    }

    fn();
ログイン後にコピー

はい 場合によっては、関数内で宣言された変数を取得する必要があるため、上記のクロージャを作成する一般的な方法を使用して、関数内に別の関数を作成できます:

    function fn() {
      var n = 100;
    }

    console.log(n); //n is not defined
ログイン後にコピー

上記のコード、関数 fn1 が含まれています 関数 fn 内には、fm 内のすべてのローカル変数が fn1 に表示されます。ただし、その逆は機能しません。fn1 内のローカル変数は fn には見えません。これは、JavaScript 言語の独自の「チェーン スコープ」構造で、子オブジェクトはすべての親オブジェクトの変数をレベルごとに検索します。したがって、親オブジェクトのすべての変数は子オブジェクトから見えますが、その逆はありません。

fn1 は fn の内部変数を読み取ることができることがわかり、fn1 が戻り値として使用されている限り、fn の変数を外部から読み取ることができます

 function fn() {
       n = 100;
    }
    fn();
    console.log(n); //100
ログイン後にコピー

ここで、fn1 はクロージャであり、クロージャは、他の関数内の変数を読み取る関数です。 Javascript言語ではローカル変数を読み込めるのは関数内のサブ関数のみであるため、クロージャは単純に「関数内で定義された関数」として理解できます。したがって、本質的に、クロージャは関数の内部と関数の外部を接続する橋です。

3.2 クロージャの目的

クロージャには 2 つの大きな用途があります。1 つは前述のように関数内の変数を読み取ること、もう 1 つはこれらの変数の値をメモリに保持することです。次のコードに示すように:

   function fn() {
      n = 100;

      function fn1() {
        console.log(n);
      }

      fn1();
    }
    fn(); //100
ログイン後にコピー

注意:由于闭包函数会携带包含它的函数的作用域,因此会比其他函数占用更多的内存,过度使用闭包可能会导致内存占用过多,所以在退出函数之前,将不使用的局部变量全部删除。

四、块级作用域

块级作用域(又称为私有作用域)的匿名函数的语法如下所示:

(function(){
   //块级作用域
})();
ログイン後にコピー

无论在什么地方,只要临时需要一些变量,就可以使用私有作用域,比如:

(function () {
      var now = new Date();
      if (now.getMonth() == 0 && now.getDate() == 1) {
        alert("新年快乐");
      }
    })();
ログイン後にコピー

把上面这段代码放到全局作用域中,如果到了1月1日就会弹出“新年快乐”的祝福;这种技术经常在全局作用域中被用在函数外部,从而限制向全局作用域中添加过多的变量和函数。一般来说,我们都应该尽量少向全局作用域中添加变量和函数。在一个由很多开发人员共同参与的大型应用程序中,过多的全局变量和函数很容易导致命名冲突。而通过创建私用作用域,每个开发人员既可以使用自己的变量,又不必担心搞乱全局作用域。

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

关于如何优化你的JS代码(图文教程)

畅谈HTML+CSS+JS(详细讲解)

原生JS+AJAX做出三级联动效果(附代码)

以上がJavaScript 関数式 (グラフィック チュートリアル)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 Dec 17, 2023 pm 02:54 PM

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 はじめに: 技術の継続的な発展により、音声認識技術は人工知能の分野の重要な部分になりました。 WebSocket と JavaScript をベースとしたオンライン音声認識システムは、低遅延、リアルタイム、クロスプラットフォームという特徴があり、広く使用されるソリューションとなっています。この記事では、WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法を紹介します。

推奨: 優れた JS オープンソースの顔検出および認識プロジェクト 推奨: 優れた JS オープンソースの顔検出および認識プロジェクト Apr 03, 2024 am 11:55 AM

顔の検出および認識テクノロジーは、すでに比較的成熟しており、広く使用されているテクノロジーです。現在、最も広く使用されているインターネット アプリケーション言語は JS ですが、Web フロントエンドでの顔検出と認識の実装には、バックエンドの顔認識と比較して利点と欠点があります。利点としては、ネットワーク インタラクションの削減とリアルタイム認識により、ユーザーの待ち時間が大幅に短縮され、ユーザー エクスペリエンスが向上することが挙げられます。欠点としては、モデル サイズによって制限されるため、精度も制限されることが挙げられます。 js を使用して Web 上に顔検出を実装するにはどうすればよいですか? Web 上で顔認識を実装するには、JavaScript、HTML、CSS、WebRTC など、関連するプログラミング言語とテクノロジに精通している必要があります。同時に、関連するコンピューター ビジョンと人工知能テクノロジーを習得する必要もあります。 Web 側の設計により、次の点に注意してください。

株価分析に必須のツール: PHP と JS を使用してローソク足チャートを描画する手順を学びます 株価分析に必須のツール: PHP と JS を使用してローソク足チャートを描画する手順を学びます Dec 17, 2023 pm 06:55 PM

株式分析に必須のツール: PHP および JS でローソク足チャートを描画する手順を学びます。特定のコード例が必要です。インターネットとテクノロジーの急速な発展に伴い、株式取引は多くの投資家にとって重要な方法の 1 つになりました。株価分析は投資家の意思決定の重要な部分であり、ローソク足チャートはテクニカル分析で広く使用されています。 PHP と JS を使用してローソク足チャートを描画する方法を学ぶと、投資家がより適切な意思決定を行うのに役立つ、より直感的な情報が得られます。ローソク足チャートとは、株価をローソク足の形で表示するテクニカルチャートです。株価を示しています

WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー Dec 17, 2023 pm 05:30 PM

WebSocketとJavaScript:リアルタイム監視システムを実現するためのキーテクノロジー はじめに: インターネット技術の急速な発展に伴い、リアルタイム監視システムは様々な分野で広く利用されています。リアルタイム監視を実現するための重要なテクノロジーの 1 つは、WebSocket と JavaScript の組み合わせです。この記事では、リアルタイム監視システムにおける WebSocket と JavaScript のアプリケーションを紹介し、コード例を示し、その実装原理を詳しく説明します。 1.WebSocketテクノロジー

JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 Dec 17, 2023 pm 12:09 PM

JavaScript と WebSocket を使用してリアルタイム オンライン注文システムを実装する方法の紹介: インターネットの普及とテクノロジーの進歩に伴い、ますます多くのレストランがオンライン注文サービスを提供し始めています。リアルタイムのオンライン注文システムを実装するには、JavaScript と WebSocket テクノロジを使用できます。 WebSocket は、TCP プロトコルをベースとした全二重通信プロトコルで、クライアントとサーバー間のリアルタイム双方向通信を実現します。リアルタイムオンラインオーダーシステムにおいて、ユーザーが料理を選択して注文するとき

PHP および JS 開発のヒント: 株価ローソク足チャートの描画方法をマスターする PHP および JS 開発のヒント: 株価ローソク足チャートの描画方法をマスターする Dec 18, 2023 pm 03:39 PM

インターネット金融の急速な発展に伴い、株式投資を選択する人がますます増えています。株式取引では、ローソク足チャートは一般的に使用されるテクニカル分析手法であり、株価の変化傾向を示し、投資家がより正確な意思決定を行うのに役立ちます。この記事では、PHP と JS の開発スキルを紹介し、株価ローソク足チャートの描画方法を読者に理解してもらい、具体的なコード例を示します。 1. 株のローソク足チャートを理解する 株のローソク足チャートの描き方を紹介する前に、まずローソク足チャートとは何かを理解する必要があります。ローソク足チャートは日本人が開発した

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 Dec 17, 2023 pm 05:13 PM

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 はじめに: 今日、天気予報の精度は日常生活と意思決定にとって非常に重要です。テクノロジーの発展に伴い、リアルタイムで気象データを取得することで、より正確で信頼性の高い天気予報を提供できるようになりました。この記事では、JavaScript と WebSocket テクノロジを使用して効率的なリアルタイム天気予報システムを構築する方法を学びます。この記事では、具体的なコード例を通じて実装プロセスを説明します。私たちは

簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 Jan 05, 2024 pm 06:08 PM

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

See all articles