JavaScript 関数構文の説明

JavaScript 関数構文の説明

1. 通常の機能

js 関数の作成は非常に特殊です。それを行う方法はたくさんあります。最も単純な方法は、C 言語のそれに似ています。

特徴:

関数名には、文字、数字、アンダースコアに加えて、「$」文字も含めることができます。

js では、関数名は関数オブジェクトを格納する変数です。関数の型を確認するには、typeof キーワードを使用します。 (この概念は、他の変数を使用してこの機能を引き継ぐことができる Python に似ています)

関数パラメータを定義するときに、var、let、const などのキーワードを記述する必要はありません。ローカルで変更可能な変数がデフォルトになります。

入力パラメータは JS 構文ではチェックされません。つまり、入力パラメータの数は少なくても多くてもよいということです。入力が少ない場合は、代わりに undefined が使用されます。入力が多い場合は、自動的に無視されます。

同様に、JS では戻り値の有無を制限せず、すべての戻り値が返されます。戻り値が指定されていない場合は、無効な値が返されます。

// 1. 関数定義
関数 printHello_1$_(name_0) 
{
    //実行
    console.log("Hello World!" + name_0);
}
console.log(typeof printHello_1$_);
// 2. 関数呼び出し
印刷Hello_1$_(); 
// 3. 関数の命名
// 4. 関数パラメータ
// 5. 関数の戻り

js は匿名関数もサポートしており、関数名を記述する必要はありません。 Python にも似たようなものがあり、Python 学習ノートにも記録されています。ラムダ匿名関数です。

// 6. 関数に名前を付けず、次のように直接作成することもできます。
彼に = function(){
    console.log("彼");
}
him() // これは、名前が実際には変数名であることを示しています。
// 8. 関数名自体は値の転送をサポートしていませんが、変数はサポートしています。
// him = printHello_1(); // エラー(配列を定義した後は値を割り当てることができないのと同様?)
彼を追加してみましょう。
追加();
// 7. この変数には他の内容を割り当てることもできます。
彼 = 6;
console.log(him) // 数字6を出力

2. 矢印関数

js の矢印関数は「真の」匿名関数であり、ネストされた関数本体をすばやく作成できます (私自身の言葉です)... また、Python のラムダ匿名関数の使用法ともより一致しています。

実際の事例を見てみると、匿名関数の作成とパラメータの受け渡しに関するものばかりでした。初めて触れたときは非常に混乱しました。以下のコードの効果を分かりやすくするために、使用しない部分をfalseに変更し、動作をブロックします。なぜコメントしないのかと疑問に思うかもしれません。使い方を練習したいからです。

使い方は簡単そうです。先頭の括弧は使用されるパラメータで、コードは矢印に従います。 1行のシンプルなコードであれば括弧を書く必要もなく、1行でも暗黙的に計算された値を返します。

(偽)の場合
{
    const add = (a, b) => a + b; // 関数を直接作成し、それを変数に割り当てて呼び出すのと同様です。
    console.log(add(1,3)); // 戻り値は書き込まれず、計算された値が暗黙的に返されます}
(偽)の場合
{
    add = (a, b) => a + b とします。
    console.log(add(1,3)); // 4 を出力
    const add_0 = add; // 通常の変数代入に置き換えることができます add = 5; // 本質は依然として変数であることがわかります。定義で変数型を使用している場合は変更できます console.log(add); // 5 を出力
    console.log(add_0(2, 4)); // 6 を出力
}
(偽)の場合
{
    console.log(add_0(10, 4)); // const 変数型はスコープを越えることはできません}

改行が必要な場合は、中括弧を使用する必要があります。よく使われます。

(偽)の場合
{
    定数を追加する = (a, b) => 
    {
        a + b を返します。
    }
    console.log(add(1,3)); // 戻り値があります。つまり、中括弧が使用されている場合は、改行を示すことができますが、暗黙的な戻りはありません。単一行には常に暗黙的な戻り値があります。
}

3. データパケットJSON

JSON (JavaScript Object Notation、JS Object Notation) は軽量のデータ交換形式です。これは、ECMAScript (欧州コンピュータ協会によって開発された js 仕様) のサブセットに基づいており、プログラミング言語から完全に独立したテキスト形式を使用してデータを保存および表現します。シンプルさと明確な階層構造により、JSON は理想的なデータ交換言語となっています。 人間にとって読み書きが容易であり、機械にとっても解析や生成が容易であり、ネットワーク伝送効率を効果的に向上させることができます。 【Wikipediaより】

  • 以前ニューラル ネットワークと ROS を勉強していたとき、私はこの種のデータ パッケージ、つまり多数のパラメーターやデータ セットを含む小さな .json ファイルにも触れました。形式的には、キーと値がペアになっている辞書に非常に似ています。グラフィカルに展開すると、実際にはヘッダーとデータを含むリストになります。
  • js は、json オブジェクトを作成するための Object クラスを提供します。 (実際には、オブジェクトを作成するためのもので、次のセクションで詳しく説明します)
// 例1
(偽)の場合
{
    const book = new Object({title : "1984", author : "George Orwell"}) // JSON オブジェクトを作成 console.log("\n ---------")
    console.log(typeof book) // 型を確認すると、確かにオブジェクトであることがわかります console.log(book) // 正常に印刷できます}
// 例 2 (次のセクションで詳しく説明、オブジェクトに関する知識ポイント)
(偽)の場合
{
    const book = ({title : "1984", author : "George Orwell"}) // キーワード Object を追加しなくても、同じ効果が得られます。
    console.log("\n ---------")
    console.log(書籍の種類)
    コンソール.log(ブック)
}
// 例3
(偽)の場合
{
    定数ブック = [
        {タイトル: "1984"、著者: "ジョージ・オーウェラ"}、
        {タイトル: "1985", 著者: "ジョージ・オーウェル"},
        {タイトル: "1986", 著者: "ジョージ・オーウェル"},
        {タイトル:「1987」、著者:「ジョージ・オーウェル」}
    ]
    console.log("\n ---------")
    console.log(typeof book) // 印刷タイプは依然としてオブジェクトですが、実際は配列です console.log(book)
}
  • js には、JSON オブジェクト データを文字列に変換するメソッドJSON.stringify()。
(偽)の場合
{
    const book = ({title : "1984", author : "George Orwell"}) // キーワード Object を追加しなくても、同じ効果が得られます。
    console.log("\n ---------")
    let bookJSON = JSON.stringify(book); // オブジェクトを元の形式のままにして文字列に変換します。キー名は文字列になります (つまり、二重引用符が追加されます)。テキストで保存するのに便利ですか?
    console.log(typeof bookJSON) // そういえば、以前ROSプロジェクトを書いたときに使ったパラメータファイルもJSONだったっけ? Baidu Feijiangのテキストファイルもこの形式だった。
    コンソールログ(bookJSON)
}
/* 出力は次のようになります:
 ---------
弦
{"title":"1984","author":"ジョージ・オーウェル"}
*/
// キーの値は元の文字列のままですが、キー名は文字列に変更されていることがわかります。

類推実験をしてみました。以下のコメントをご覧ください。

(偽)の場合
{
    定数ブック = ([1,23,3,"156"]) 
    console.log("\n ---------")
    console.log(typeof book) // 型はまだオブジェクトです
    let bookJSON = JSON.stringify(book); // エラーなしで呼び出すことができます。
    console.log(typeof bookJSON) // 結果は元の結果とまったく同じ文字列になります。
    コンソールログ(bookJSON)
}
/* 出力は次のようになります:
 ---------
物体
弦
[1,23,3,"156"]
*/
// 関数が動作していないことがわかります。形式が JSON 要件を満たしていない場合は機能せず、エラーも報告されません。

js には、文字列データを JSON オブジェクトに変換するメソッドJSON.parse()。これはJSON.stringify()の逆の操作です。

(偽)の場合
{
    data_0 = "[1,2,3]"とします。
    let data = "{\"title\" : \"1984\", \"author\" : \"George Orwell\"}"; // JSON 文字列形式では、文字列のような形式を作成するために、キーと値の両方を二重引用符で囲む必要があることに注意してください。何か問題があれば変換は失敗します。
    let parsed = JSON.parse(data); // 逆の操作で、文字列をオブジェクト型に戻します。フォーマットに準拠しているかどうかを解析します。
    console.log("\n -----")
    console.log(解析済み); // 
    console.log(解析されたtypeof) 
    console.log(データの種類) 
}
/* 出力は次のようになります:
 -----
{ タイトル: '1984'、著者: 'ジョージ・オーウェル' }
物体
弦
*/
// 文字列内のスラッシュはより厄介なことに注意してください
  • JSON 形式のデータの使い方を学ぶことは非常に重要です。json 変数は通常のデータではなく、多くのデータ処理関数を含むオブジェクトです。例えば、上記のような文字列とデータを変換する関数は、実際の戦闘でも使われます。操作には、データの読み取りとデータの保存の 2 つがあります。

4. オブジェクト

js でのオブジェクトの作成は python のクラスとは異なりますが、オブジェクトを直接作成します。例を直接見て、詳しく説明します。

(偽)の場合
{
    data_0 = "[1,2,3]"とします。
    let data = "{\"title\" : \"1984\", \"author\" : \"George Orwell\"}"; // JSON 文字列形式では、文字列のような形式を作成するために、キーと値の両方を二重引用符で囲む必要があることに注意してください。何か問題があれば変換は失敗します。
    let parsed = JSON.parse(data); // 逆の操作で、文字列をオブジェクト型に戻します。フォーマットに準拠しているかどうかを解析します。
    console.log("\n -----")
    console.log(解析済み); // 
    console.log(解析されたtypeof) 
    console.log(データの種類) 
}
/* 出力は次のようになります:
 -----
{ タイトル: '1984'、著者: 'ジョージ・オーウェル' }
物体
弦
*/
// 文字列内のスラッシュはより厄介なことに注意してください

形式から、文字列や匿名関数を含む一連の属性のように感じられます。また、等号を使用する代わりに、辞書のキーペアと同様に、コロンを使用して値を割り当てます。

したがって、json データ パケットは js 内のオブジェクトの存在と同等であると思われます。関数メソッドを直接印刷すると、[Function (anonymous)] のようなものが出力されます。

最初に直接値を割り当てるだけでなく、最初に空のオブジェクトを作成し、徐々に値を追加することもできます。プロパティがすでに存在する場合は上書きされ、そうでない場合は追加として扱われます。 (非常に単純で粗雑)

// 2. コンストラクタを使用してオブジェクトを作成する別の方法 if (false)
{
    定数ブック = 新しいオブジェクト();
    console.log(book); // 初期作成は空です console.log(typeof book); // 型はオブジェクトです
    書籍のタイトル = "1984";
    book.author = "ジョージ・オーウェル";
    book.isAvailable = false; // 属性を追加 book.checkIn = function(){
        this.isAvailable = true; // メソッドを追加 };
    book.checkOut = 関数(){
        this.isAvailable = false; 
    };
     console.log(book); // 通常どおり印刷 console.log(typeof book);
    // 3. オブジェクト内の要素にアクセスするためのメソッド:
    console.log(book.title); // 構造体に似たアクセス console.log(book["title"]); // 辞書に似たアクセス、出力結果は同じです。この方法でアクセスする場合、キー名は二重引用符で囲み、文字列として扱う必要があることに注意してください console.log(book.checkIn); // アクセス関数の場合、括弧が追加されていなければ、オブジェクトが返されます。類似の文字を印刷する: [関数 (匿名)]
    console.log(book.checkIn()); // 括弧を追加すると、呼び出し実行と同等になります。(関数には戻り値がないので戻り値は空です)
    console.log(book["checkIn"]); // 辞書形式でアクセスしても同じ結果になります。 console.log(book["checkIn"]()); // この括弧は角括弧の外側にあります。
}
  • コンテキスト メカニズム: これはオブジェクト内のオブジェクトの名前を参照するのではなく、コンテキスト内で使用される変数を参照します。 (詳しくは動画をご覧ください。よく分かりません)
  • 私が使用する主語と同様に、私が使用する主語はオブジェクトであり、返されるものはオブジェクトであり、私が使用する関数は関数を返します。したがって、関数自体もオブジェクトですが、関数内でも使用できます (?)。
(偽)の場合
{
    const bookObj = { // オブジェクトを作成する checkIn : function(){ // 属性を追加する return this; // この属性はメソッドであり、戻り値があり、オブジェクト自体を返します}
    }
    function anotherCheckIn(){ // 関数を作成する return this; // 関数自体を返す}
    console.log(bookObj.checkIn() == bookObj); // 戻り値はオブジェクト自体です。正解です console.log(bookObj.checkIn() == globalThis); // 戻り値は関数です。間違いです console.log(anotherCheckIn() == globalThis); // 戻り値は関数です。正解です }

5. 約束

js の非同期操作メカニズムについて説明している、わかりにくいセクションですか?話せば話すほど間違いが増える恐れがあるので、あまり詳しく説明しません。

// Promise オブジェクトは、非同期操作の最終的な完了 (または失敗) とその結果の値を表すために使用されます。
(真)の場合
{
    function promiseTimeout(ms){ // 関数を作成します return new Promise((resolve, reject) => { // Promise オブジェクトを返します。入力パラメータは匿名関数です。匿名関数には 2 つのパラメータがあり、1 つは成功時に実行されるコンテンツで、もう 1 つは失敗時に実行されるコンテンツです。 setTimeout(resolve, ms); // js 内部関数。最初のパラメータのコンテンツを実行する前に、2 番目のパラメータを ms 遅延します。
        });
    }
    promiseTimeout(2000) //関数を呼び出してパラメータ2000msを渡します。
        .then(() => { // 返された Promise オブジェクトの組み込みメソッド。成功した場合は呼び出されます。この組み込みメソッドには、匿名関数であるパラメーターもあります。 console.log('Done!!'); // この匿名関数にはパラメーターがなく、内部関数は出力のみです。 return promiseTimeout(1000); // 関数を再度呼び出して、別の変数を返します。 }).then(() => { // 上記は別の変数を返すため、チェーンで呼び出すことができます。
            console.log('Also done!!'); // 1000ms 遅延し、操作が成功したら return を呼び出します Promise.resolve(42); // 別のオブジェクト (無限の入れ子人形) を返します }).then((result_0) => { // パラメータを渡します。このパラメータの名前は任意ですが、変更した後でも効果を得ることができます。IDE は自動的にこれを赤でマークするため、これが文法上のキーワードではなく変数であることがわかります console.log(result_0); // パラメータを出力します })
        .catch(() => { // 上記と同じですが、失敗した場合は console.log('Error!') を呼び出します。
        })
    // Promise.prototype.then メソッドと Promise.prototype.catch メソッドは Promise を返すため、連鎖させることができます。
}
/*
実行結果は次のとおりです。
しばらく待ってから、次の行を印刷します。
終わり!
しばらく待つと、2 行が同時に印刷されます。
これも完了!
42
*/

6. 非同期: 待機

Promise メカニズムの反対。

// 非同期:待機
関数promiseTimeout(ms){
    新しい Promise を返します ((resolve, reject) => {
        setTimeout(解決、ミリ秒);
    });
}
非同期関数longRunningOperation(){
    42を返します。
}
非同期関数run() {
    console.log('開始!');
    await promiseTimeout(2000); // await キーワードを追加すると、結果は同期操作と同様になります。本来、Promise を使用すると、最初に印刷が行われ、その後遅延が発生します。A/A を追加すると、最初に遅延が発生し、その後順番に印刷されます。
    const 応答 = longRunningOperation() を待機します。
    console.log(response); // 論理的には、42 を返して直接出力する必要があります。実際、await キーワードが追加されていない場合は、42 ではなく、Promise オブジェクトがすぐに返されます。
    console.log('停止!!');
}
走る();
/*
実行結果は次のとおりです。
まず 1 行を印刷します:
始める!
少し待つと、2 行が同時に印刷されます。
42
停止!
*/

7. パッケージ

node.js に含まれる nvm ツールを使用すると、js ソフトウェア パッケージを適切に管理できます。また、プロジェクトには関連するソフトウェア パッケージのディレクトリを装備できます。対応するソフトウェア パッケージを追加し、プロジェクトの更新コマンドを入力してソフトウェア パッケージをプロジェクトに追加するだけです。

コンパイルに似ていますが、これはダウンロードです。これまで、Python はソフトウェア パッケージをコンピュータの作業環境スペースに直接インストールすることを推奨していました。 C 言語関連のライブラリをプロジェクトに含めることをお勧めします。このプロジェクトでは js も推奨されています。ただし、プログラムを転送する場合、ソフトウェア パッケージ フォルダーは削除されます。プロジェクトコード部分のみを転送します。転送が完了すると、別のコンピューターでアップデートダウンロード機能を使用できるようになります。この操作は、以前学んだ ROS プロジェクトに少し似ています。ただし、正しく設定されていなくても、ros プロジェクトは正常に実行できます。js が正確に設定されていない場合は、コンパイルに合格しません。

要約する

この記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。

以下もご興味があるかもしれません:
  • JSの矢印関数におけるこのポイントの詳細な説明
  • Vue.jsのレンダリング関数の使い方の詳しい説明
  • JavaScript 基礎シリーズ: 関数とメソッド
  • JavaScript 関数呼び出し、適用、バインド メソッドのケース スタディ
  • JavaScript CollectGarbage 関数の例
  • JavaScript関数導入の詳しい説明

<<:  MySQL 外部キー制約の例の説明

>>:  Nginx リバースプロキシの例の詳細な説明

推薦する

ウェブデザインのためのオンライン開発ツール10選の紹介

1. オンラインテキストジェネレーターBlindTextGenerator: デザイナーにとって、こ...

iframe 適応サイズ実装コード

ページドメインの関係:メインページ a.html はドメイン A: www.jb51.net に属し...

jQueryブリージングカルーセルの制作原理を詳しく解説

この記事では、jQueryブリージングカルーセル制作原理の具体的なプロセスを参考までに紹介します。具...

HTMLのリストタグを数える

1. <dl>はリストを定義し、<dt>はリスト内の項目を定義し、<d...

CentOS7 ファイアウォールとポート関連コマンドの紹介

目次1. ファイアウォールの現在の状態を確認する2. ファイアウォールサービスを開始する3. ファイ...

CSS3はグラフィックの落下アニメーション効果を実現します

まずは効果を確認実装コード <div class="box box1"&g...

Angularの親子コンポーネント通信の詳細な説明

目次使用されるAPI簡単な例人.ts親コンポーネントサブコンポーネント効果要約する使用されるAPI ...

VMware+centOS 8 で http プロトコルに基づく Git サービスを構築する方法

目次1. 原因2. デバイス情報3. 準備4. Apacheをインストールする5. gitを設定する...

Vueはシンプルなショッピングカートの例を実装します

この記事では、参考までに、Vue の具体的なコードを共有して、簡単なショッピングカートを実装します。...

オブジェクトアニメーションによってブロックされずにオブジェクトに div を表示する方法

今日はメニューボタンを作りました。マウスをボタンに移動するすると、ドロップダウンサブメニューが表示さ...

WeChatアプレットは画像コントロールを選択します

この記事の例では、WeChatアプレットで画像コントロールを選択するための具体的なコードを参考までに...

Web デザインでフラッシュ オーバーレイ ポップアップ レイヤーの z-index プロパティを設定しても機能しない

デフォルトでは、Flash は常にページのトップレベルに表示されます。つまり、ページに DHTML ...

HTML フォーマットの json のサンプルコード

さっそく、コードを直接投稿します。具体的なコードは次のとおりです。 <!DOCTYPE htm...

HTML コードを書くための 30 のヒント

1. HTMLタグは常に閉じる前のページのソース コードでは、次のような記述がよく見られます。 &l...

Linux コマンドラインからファイルを削除する実用的な方法

rm コマンドrm コマンドは、ファイルを削除するときによく使用されるコマンドです。ファイルまたはデ...