最近、私は JavaScript の関数プログラミングを学んでいます。そして、有名なカリー関数にとても興味があります。カリー関数は関数を受け取ることができ、とりあえずオリジナルの関数と呼ぶことにします。これは関数、カリー化された関数を返します。この関数は非常に強力で、実行プロセス中、元の関数の実行条件がトリガーされるまで、渡されたパラメーターを格納する関数を返し続けます。これはより一般的なので、説明するために例を示します:
元の関数:
var add = (x, y) => x + y
カリー化された関数:
var curryAdd = curry(add)
この追加には 2 つのパラメーターが必要ですが、curryAdd の実行では、渡されるパラメーターの数が少ない場合、より少ないパラメーターを渡すことができます。 add で必要なパラメータ以外の場合、add 関数は実行されません。curryAdd はパラメータを書き留め、別の関数を返します。この関数は、渡されたパラメータを引き続き実行できます。特別に、受信パラメータの状況を記録します。受信パラメータの合計数が add で必要なパラメータの合計数と等しい場合、元のパラメータの実行がアクティブになり、必要な結果が返されます。
// 此时只传入了一个参数 根据判断返回的是一个函数 var add2 = curryAdd(2) // add2 = function(...) {}rree
かなり良いですよね? さて、私たちの目標はこの魔法のカレー関数を書くことであり、それを 1 行で記述する必要があります。心配しないで、最初にその書き方を分析してから、段階的に最適化していきます。 。
上記の説明に基づいて、curry 関数に必要なものを見てみましょう。まず、関数には length という属性があることがわかります。それを保存するには、limit を使用します。
// 此时累计传入了两个参数 等于了add需要参数的总和 所以返回的是一个结果 // 相当于执行了add(2)(3) var result = add2(3) // result = 5
カレー関数は、実行する必要がある関数を返す必要があります。問題は、この関数の実行が元の関数の実行をアクティブにするかどうかを判断する必要があることです。渡されるパラメータ。関数または結果を返しますか?これは確かに問題です。渡されたパラメータが元の関数に必要なパラメータと等しい場合は、元の関数 fn
var curry = function(fn) { var limit = fn.length ... }
を実行する必要があります。パラメータは 2 つあります。1 つは渡されたパラメータの履歴を記録する必要があること、もう 1 つは返された関数が何をする必要があるかです
var curry = function(fn) { var limit = fn.length return function (...args) { if (args.length >= limit) { return fn.apply(null, args) } } }
ご存知のとおり、必要なのは、返された関数の実行パラメータを蓄積することだけです。渡されたパラメータを記録する この状況の目的のために、返す関数がしなければならないことは、上記のことを繰り返すことであり、これが関数の目的です。パラメータ args が行う必要があるため、名前が必要です。そうでないと実行できません。これを judgeCurry と呼びます
したがって、前述したように、関数を返すか、元の関数を実行します。
rreeeこの魔法のカレー関数をついに書き終えました。Compose と組み合わせると、本当に強力になります。
私たちの目標は、上記の関数を 1 行で書くことです。書き方?ちなみに、私はES6を使用しているので、かなりの時間を費やしました
var curry = function(fn) { var limit = fn.length return function (...args) { if (args.length >= limit) { return fn.apply(null, args) } else { return function(...args2) { } } } }
さて、何が問題なのか見てみましょう ちなみに、limitパラメータを使用しないようにするには、使用時に値を割り当てる必要があります。このように、
var curry = function(fn) { var limit = fn.length return function judgeCurry (...args) { if (args.length >= limit) { return fn.apply(null, args) } else { return function(...args2) { return judgeCurry.apply(null, args.concat(args2)) } } } }
はパラメータを判定する際に常にfn.lengthを評価する必要がありますが、fn.lengthの値は確定したくないのです。毎回ですが制限を使いたくないのですがどうすればよいですか?この関数をすぐに実行することを考えたに違いありません。 !
var currySingle = fn => judgeCurry = (...args) => args.length >= fn.length ? fn.apply(null, args) : (...args2) => judgeCurry.apply(null, args.concat(args2))
JavaScript の魔法にため息をつくしかありません。ついに、この魔法のカレーを一行で書き上げました。
上記は JavaScript 関数プログラミングでのカレー実装の内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) をご覧ください。

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

WebStorm Mac版
便利なJavaScript開発ツール
