JSの戻り値の問題
今日、JS関数の戻り値についての記事をインターネットで見かけました。 JS関数にはいくつか難しい点があります。 js関数が別の関数を返す問題について上で述べましたが、インタビューの質問を添付しましたので共有します
[javascript] view plain copy var add = function(x){ var sum = 1; var tmp = function(x){ sum = sum + x; return tmp; } tmp.toString = function(){ return sum; } return tmp; } // alert(add(1)(2)(3)) --> 6
次に、別の関数を返す問題について詳しく説明します。
実は私は Java 出身で、最初にその記事を見たとき、別の関数を返すことについてあまり知りませんでした。この記事を書いた理由は、最後の呼び出しメソッドです
。[javascript] view plain copy
add(1)(2)(3)
Java でこのような関数呼び出しメソッドを見たことがなかったので、注目を集めたので、いくつか調査して共有することにしました。もちろん、これについてすでに深く理解している場合は、スキップすることも、欠点を指摘して笑い飛ばすこともできます。さて、さっそく本題に入りましょう。
最も単純な例を見てみましょう:
[javascript] view plain copy function create1(pro) { console.log("pro : " + pro); return function(obj1, obj2){ console.log(obj1 + " -- " + obj2); return obj1 + obj2; } }
単純な関数 create1 を作成しました。これには戻り値があり、戻り値は 内部関数 です。関数が構築されたら、次にそれを呼び出しましょう:
[javascript] view plain copy var c1 = create1("pro"); // 创建函数
私のこれまでの理解によれば、このメソッドを呼び出すと pro: pro が出力され、その後エラーが報告されるはずです。これを読んで私と同じ考えを持った人は、考えすぎや固定観念を持っていることをおめでとうございます
。実際のところ、上記のコードを通じて呼び出すと、ログには pro : pro が出力されますが、エラーは報告されず、繰り返し呼び出した後は同じログが前後に出力されるだけです。これは、この時点では create1() メソッドに入っただけで、関数の内部関数には入っていないことも意味します。面接の質問に触発されて、一度呼び出してみたところ、その後の結果が出力されることがわかりました。
[java] view plain copy c1(1, 2); // 调用函数
次のログが出力されます。これは、最初にメソッドを呼び出したときに、実際には内部関数に入っていないことを示しています。内部関数には、再度呼び出すことによってのみ入ることができます。このとき、上記の呼び出しを繰り返すと、内側の層の関数本体のみが呼び出され、外側の関数本体は存在しません。
このような関数は別の関数を返します。最初の呼び出しでは、外側の関数本体オブジェクトを構築するだけです。繰り返しの呼び出しでは、内側の関数本体のみが繰り返されます。
心配しないでください、まだ終わっていません。まだ続きがあります...
次に、別の状況を見てみましょう。最初に加算を行う関数を宣言します:
[javascript] view plain copy function infun(obj1, obj2) { console.log(obj1 + " -- " + obj2); return obj1 + obj2; } 然后再声明一个函数,在该函数中调用上面声明的函数: [javascript] view plain copy function create2(pro) { console.log("pro = " + pro); return infun(obj1, obj2); // 这个时候,会报错 }
最後に、
を呼び出します。[javascript] view plain copy var c1 = create2("pro");
ログを確認します:
pro = pro Uncaught ReferenceError: obj1 is not defined
ログを出力した後、例外がスローされることがわかります。メソッドにいくつかの変更を加えます。
[javascript] view plain copy function create2(pro) { console.log("pro = " + pro); var obj1 = 1, obj2 = 2; return infun(obj1, obj2); // 这个时候,会报错 }
が呼び出されると、正常に実行され、2 つのログ レコードが出力されます。
これは、これと同様に、関数内で宣言された関数を返すことは、実際には宣言された関数を呼び出していることを示しており、上記の状況とは異なります。
さて、冒頭のインタビューの質問を振り返って詳しく見てみましょう。すると、すべてが明らかであることがわかります:
[javascript] view plain copy // 声明一个函数表达式 var add = function(x){ var sum = 1; // 在函数表达式内部有一个求和的内部函数 var tmp = function(x){ sum = sum + x;// 求和 return tmp; } // 构建一个函数体的toString()函数 tmp.toString = function(){ return sum; } return tmp; // 返回的是一个函数体,如果该函数体有toString()方法,则会调用函数体的toString()方法 }
次に、通話を見てみましょう:
[javascript] view plain copy alert(add(1)(2)(3))
結果は 6 です。理由は次のとおりです。最初のものと同じです。次に、繰り返し呼び出します。
[javascript] view plain copy // 以下结果输出为:6 alert(add(10)(2)(3)) alert(add(100)(2)(3)) // 下面的结果输出变了 alert(add(1)(3)(3)) alert(add(1)(2)(5))
これらのケースを読んだ後は、この方法を習得したと思います。さらに興味深い情報については、他の関連記事に注目してください。 PHP中国語ウェブサイトです!
関連書籍:
CSS を使用して画像の背景のテキストコンテンツを非表示にする方法
CSS を使用して HTML で div を非表示にする方法
以上がJSの戻り値の問題の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック

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

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

PHP のヒント: 前のページに戻る機能をすばやく実装する Web 開発では、前のページに戻る機能を実装する必要があることがよくあります。このような操作により、ユーザー エクスペリエンスが向上し、Web ページ間の移動が容易になります。 PHP では、いくつかの簡単なコードを通じてこの機能を実現できます。この記事では、前のページに戻る機能を素早く実装する方法と、具体的な PHP コード例を紹介します。 PHP では、$_SERVER['HTTP_REFERER'] を使用して前のページの URL を取得できます。

MySQL は、データの保存と管理に広く使用されているリレーショナル データベース管理システムです。新しいデータをデータベース テーブルに挿入する場合、通常は INSERT ステートメントを使用します。 MySQL では、INSERT ステートメントが実行されてデータが正常に挿入されると、挿入操作の結果である結果が返されます。この記事では、データを挿入した後に MySQL によって返される結果について詳しく説明し、いくつかの具体的なコード例を示します。 1. データを挿入した後に返される結果は MySQL にあり、正常に実行された場合

jQuery.val() が使用できない問題を解決するには、具体的なコード例が必要です フロントエンド開発者にとって、jQuery の使用は一般的な操作の 1 つです。その中でも、.val() メソッドを使用してフォーム要素の値を取得または設定する操作は、非常に一般的な操作です。ただし、特定のケースでは、.val() メソッドを使用できないという問題が発生する可能性があります。この記事では、いくつかの一般的な状況と解決策を紹介し、具体的なコード例を示します。問題の説明 jQuery を使用してフロントエンド ページを開発する場合、時々次のような問題が発生します。

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

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

JavaScript で HTTP ステータス コードを取得する方法の紹介: フロントエンド開発では、バックエンド インターフェイスとの対話を処理する必要があることが多く、HTTP ステータス コードはその非常に重要な部分です。 HTTP ステータス コードを理解して取得すると、インターフェイスから返されたデータをより適切に処理できるようになります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法と、具体的なコード例を紹介します。 1. HTTP ステータス コードとは何ですか? HTTP ステータス コードとは、ブラウザがサーバーへのリクエストを開始したときに、サービスが
