JS匿名関数の使い方

Apr 14, 2018 pm 03:43 PM
javascript 使用 どうやって

今回は、JSの匿名関数の使い方と、JSの匿名関数を使用する際の注意事項についてご紹介します。実際の事例を見てみましょう。

匿名関数の基本形式は次のとおりです (function(){...})();

最初の括弧には関数本体が含まれており、次の括弧は匿名関数にパラメータを渡してすぐに実行します

匿名関数の目的は、グローバル変数の汚染と関数名の競合を避けることです

コードを読むときは常に、匿名関数に注意する必要があります。ラムダと呼ばれることもあれば、匿名関数と呼ばれることもあり、どちらにしても使いにくいと思います。

匿名関数が何なのかわからない場合は、次の引用を参照してください:

匿名関数は、実行時に動的に宣言される関数です。これらは、通常の関数とは異なり、関数名を持たないため、匿名関数と呼ばれます。 — ヘレン・エマーソン、Helenphant.com

匿名関数の形式は次のとおりです:

function () { ... code ... }
OR
(args) => { ... code .. }
ログイン後にコピー

今日は、一般的に絶対に必要な場合にのみ匿名関数を使用するという考えを理解してもらいたいと思います。匿名関数は優先されるべきではなく、理由がわかっている場合にのみ使用する必要があります。この考え方を理解すると、コードがよりクリーンになり、保守が容易になり、バグの追跡が容易になります。匿名関数の使用を避ける 3 つの理由から始めましょう:

コードを記述するとき、コードの入力がどれほど上手であっても、必ずエラーが発生します。これらのエラーは簡単に検出できる場合もあれば、そうでない場合もあります。

エラーの原因がわかれば、エラーは簡単に検出できます。エラーを見つけるには、スタック トレースと呼ばれるこのツールを使用します。スタック トレースについて詳しくない場合は、Google に素晴らしい入門書があります。

非常に単純なプロジェクトがあるとします:

function start () {
 (function middle () {
 (function end () {
  console.lg('test');
 })()
 })()
}
ログイン後にコピー

上記のコードには非常に愚かな間違い、タイプミスがあります (console.log)。小規模なプロジェクトでは、このスペル ミスは大きな問題にはなりません。 これが、多数のモジュールを含む非常に大規模なプロジェクトの小さなセクションである場合、問題は大きくなります。あなたがこの愚かな間違いを犯していないと仮定すると、新しいジュニア エンジニアは休暇に入る前にそれをコード ベースにコミットするでしょう。

今、私たちはその真相に到達しなければなりません。 注意深く名前を付けた関数を使用すると、次のようなスタック トレースが得られます:

ジュニア開発者の皆さん、関数に名前を付けてくれてありがとう! これで、バグを簡単に追跡できるようになりました。

しかし...それを修正した後、別のバグがあることがわかりました。 今回は上級開発者からのものでした。この人はラムダについて知っています
彼らはバグに遭遇したことが判明し、それを追跡するのが私たちの仕事です。

コードは次のとおりです:

(function () {
 (function () {
 (function () {
  console.lg('test');
 })();
 })();
})();
ログイン後にコピー

当然のことながら、この開発者は console.log の綴り方も忘れていました。これは偶然すぎる!どれもその機能に名前を付けていないのは残念です。

では、コンソールには何が出力されるのでしょうか?

そうですね、少なくとも行番号はまだ残っていますよね?この例では、約 7 行のコードがあるように見えます。大きなコードブロックを扱うとどうなるでしょうか?コードは 1 万行くらいですか?行番号の範囲が非常に大きい場合はどうすればよいでしょうか?コードが折りたたまれた後にコード map ファイルがある場合、行番号のレンダリングはまったく役に立たないのでしょうか?

これらの質問に対する答えは非常に簡単だと思います。これらのことを考えると、一日がかなり悲惨になるでしょう。

可読性

ねえ、あなたはまだ信じていないそうですよ。あなたはまだ匿名関数にアタッチされており、バグは一度も発生していません。あなたのコードが完璧だと思っていることをお詫びしなければなりません。これを見てみましょう!

次の 2 つのコードを見てください:

function initiate (arguments) {
 return new Promise((resolve, reject) => {
 try {
  if (arguments) {
   return resolve(true);
  }
  return resolve(false);
 } catch (e) {
  reject(e);
 }
 });
}
initiate(true)
 .then(res => {
  if (res) {
   doSomethingElse();
  } else {
   doSomething();
  }
 ).catch(e => {
   logError(e.message);
   restartApp();
   }
 );
ログイン後にコピー

これは非常に珍しい例ですが、私の言いたいことは理解していただけると思います。このメソッドは Promise を返し、この Promiseobject/メソッドを使用して、考えられるさまざまな応答を処理します。

これらのいくつかのコードは読みにくくないと思われるかもしれませんが、私はもっと良くできると思います。

すべての匿名関数を削除したらどうなるでしょうか?

function initiate (arguments) {
 return new Promise(checkForArguments);
}
function checkForArguments (resolve, reject) {
 try {
 if (arguments) {
  return resolve(true); 
 }
 return resolve(false);
 } catch (e) {
 reject(e);
 }
}
function evaluateRes (res) {
 if (res) {
 doSomethingElse();
 } else {
 doSomething();
 }
}
function handleError (e) {
 logError(e.message);
 restartApp();
}
initiate(true)
 .then(evaluateRes)
 .catch(handleError);
ログイン後にコピー

好,先讲清楚:这部分代码更长,但我认为其不仅仅是有更多的可读性!我们精心命名的函数与匿名函数不一样,只要我们一看到它们的名字就知道它们的功能是什么。这避免了在评估代码时的障碍。

这也有助于分清楚其中的关系。与创建一个方法、将其传递、然后运行逻辑不同,在第二个例子中的参数被给到了then,catch只是指向了发生所有事情的函数。

关于更具有可读性,我没有什么再能说服你的了。但是也许你还没被说服的话,我可以试一下最后的论据。

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:



以上がJS匿名関数の使い方の詳細内容です。詳細については、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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

マグネットリンクの使い方 マグネットリンクの使い方 Feb 18, 2024 am 10:02 AM

マグネット リンクは、リソースをダウンロードするためのリンク方法であり、従来のダウンロード方法よりも便利で効率的です。マグネット リンクを使用すると、中間サーバーに依存せずに、ピアツーピア方式でリソースをダウンロードできます。この記事ではマグネットリンクの使い方と注意点を紹介します。 1. マグネット リンクとは? マグネット リンクは、P2P (Peer-to-Peer) プロトコルに基づくダウンロード方式です。ユーザーはマグネット リンクを通じてリソースの発行者に直接接続し、リソースの共有とダウンロードを完了できます。従来のダウンロード方法と比較して、磁気

mdfおよびmdsファイルの使用方法 mdfおよびmdsファイルの使用方法 Feb 19, 2024 pm 05:36 PM

mdf ファイルと mds ファイルの使用方法 コンピューター技術の継続的な進歩により、さまざまな方法でデータを保存および共有できるようになりました。デジタル メディアの分野では、特殊なファイル形式に遭遇することがよくあります。この記事では、一般的なファイル形式である mdf および mds ファイルについて説明し、その使用方法を紹介します。まず、mdf ファイルと mds ファイルの意味を理解する必要があります。 mdf は CD/DVD イメージ ファイルの拡張子で、mds ファイルは mdf ファイルのメタデータ ファイルです。

CrystalDiskmarkとはどのようなソフトウェアですか? -crystaldiskmarkの使い方は? CrystalDiskmarkとはどのようなソフトウェアですか? -crystaldiskmarkの使い方は? Mar 18, 2024 pm 02:58 PM

CrystalDiskMark は、シーケンシャルおよびランダムの読み取り/書き込み速度を迅速に測定する、ハード ドライブ用の小型 HDD ベンチマーク ツールです。次に、編集者が CrystalDiskMark と Crystaldiskmark の使用方法を紹介します。 1. CrystalDiskMark の概要 CrystalDiskMark は、機械式ハード ドライブとソリッド ステート ドライブ (SSD) の読み取りおよび書き込み速度とパフォーマンスを評価するために広く使用されているディスク パフォーマンス テスト ツールです。 ). ランダム I/O パフォーマンス。これは無料の Windows アプリケーションで、使いやすいインターフェイスとハード ドライブのパフォーマンスのさまざまな側面を評価するためのさまざまなテスト モードを提供し、ハードウェアのレビューで広く使用されています。

foob​​ar2000のダウンロード方法は? -foobar2000の使い方 foob​​ar2000のダウンロード方法は? -foobar2000の使い方 Mar 18, 2024 am 10:58 AM

foob​​ar2000 は、音楽リソースをいつでも聴くことができるソフトウェアです。あらゆる種類の音楽をロスレス音質で提供します。音楽プレーヤーの強化版により、より包括的で快適な音楽体験を得ることができます。その設計コンセプトは、高度なオーディオをコンピュータ上で再生可能 デバイスを携帯電話に移植し、より便利で効率的な音楽再生体験を提供 シンプルでわかりやすく、使いやすいインターフェースデザイン 過度な装飾や煩雑な操作を排除したミニマルなデザインスタイルを採用また、さまざまなスキンとテーマをサポートし、自分の好みに合わせて設定をカスタマイズし、複数のオーディオ形式の再生をサポートする専用の音楽プレーヤーを作成します。過度の音量による聴覚障害を避けるために、自分の聴覚の状態に合わせて調整してください。次は私がお手伝いさせてください

PIP ミラー ソースの簡単なガイド: 使い方を簡単にマスターする PIP ミラー ソースの簡単なガイド: 使い方を簡単にマスターする Jan 16, 2024 am 10:18 AM

簡単に始めましょう: pip ミラー ソースの使用方法 世界中での Python の人気により、pip は Python パッケージ管理の標準ツールになりました。ただし、pip を使用してパッケージをインストールするときに多くの開発者が直面する一般的な問題は速度の遅さです。これは、デフォルトでは、pip は Python 公式ソースまたはその他の外部ソースからパッケージをダウンロードしますが、これらのソースが海外のサーバーに配置されている可能性があるため、ダウンロード速度が遅くなることがあります。ダウンロード速度を向上させるために、pip ミラー ソースを使用できます。ピップミラーソースとは何ですか?簡単に言えば、ただ、

BTCC チュートリアル: BTCC 取引所で MetaMask ウォレットをバインドして使用する方法は? BTCC チュートリアル: BTCC 取引所で MetaMask ウォレットをバインドして使用する方法は? Apr 26, 2024 am 09:40 AM

MetaMask (中国語ではリトル フォックス ウォレットとも呼ばれます) は、無料で評判の高い暗号化ウォレット ソフトウェアです。現在、BTCC は MetaMask ウォレットへのバインドをサポートしており、バインド後は MetaMask ウォレットを使用してすぐにログイン、値の保存、コインの購入などが可能になり、初回バインドで 20 USDT のトライアル ボーナスも獲得できます。 BTCCMetaMask ウォレットのチュートリアルでは、MetaMask の登録方法と使用方法、および BTCC で Little Fox ウォレットをバインドして使用する方法を詳しく紹介します。メタマスクウォレットとは何ですか? 3,000 万人を超えるユーザーを抱える MetaMask Little Fox ウォレットは、現在最も人気のある暗号通貨ウォレットの 1 つです。無料で使用でき、拡張機能としてネットワーク上にインストールできます。

NetEase メールボックス マスターの使用方法 NetEase メールボックス マスターの使用方法 Mar 27, 2024 pm 05:32 PM

NetEase Mailbox は、中国のネットユーザーに広く使用されている電子メール アドレスとして、その安定した効率的なサービスで常にユーザーの信頼を獲得してきました。 NetEase Mailbox Master は、携帯電話ユーザー向けに特別に作成された電子メール ソフトウェアで、電子メールの送受信プロセスが大幅に簡素化され、電子メールの処理がより便利になります。 NetEase Mailbox Master の使い方と具体的な機能について、以下ではこのサイトの編集者が詳しく紹介しますので、お役に立てれば幸いです。まず、モバイル アプリ ストアで NetEase Mailbox Master アプリを検索してダウンロードします。 App Store または Baidu Mobile Assistant で「Ne​​tEase Mailbox Master」を検索し、画面の指示に従ってインストールします。ダウンロードとインストールが完了したら、NetEase の電子メール アカウントを開いてログインします。ログイン インターフェイスは次のとおりです。

Baidu Netdisk アプリの使用方法 Baidu Netdisk アプリの使用方法 Mar 27, 2024 pm 06:46 PM

クラウド ストレージは今日、私たちの日常生活や仕事に欠かせない部分になっています。中国有数のクラウド ストレージ サービスの 1 つである Baidu Netdisk は、強力なストレージ機能、効率的な伝送速度、便利な操作体験により多くのユーザーの支持を得ています。また、重要なファイルのバックアップ、情報の共有、オンラインでのビデオの視聴、または音楽の聴きたい場合でも、Baidu Cloud Disk はニーズを満たすことができます。しかし、Baidu Netdisk アプリの具体的な使用方法を理解していないユーザーも多いため、このチュートリアルでは Baidu Netdisk アプリの使用方法を詳しく紹介します。まだ混乱しているユーザーは、この記事に従って詳細を学ぶことができます。 Baidu Cloud Network Disk の使用方法: 1. インストール まず、Baidu Cloud ソフトウェアをダウンロードしてインストールするときに、カスタム インストール オプションを選択してください。

See all articles