この記事では、JavaScript ES6 のアロー関数の基本的な知識を初心者向けに詳しく説明します。ES6 では、「アロー」を使用して関数を定義することができます。読みやすさを確保するために、この記事では直訳ではなく意訳を使用しています。また、この記事の著作権は原著者に帰属し、翻訳は学習のみを目的としています。
この記事ではアロー機能のメリットを紹介します。
より簡潔な構文
まず、通常の構文に従って関数を定義しましょう:
function funcName(params) { return params + 2; } funcName(2); // 4
この関数はアロー関数を使用しており、たった 1 行のコードで実行できます。
りーカッコいいじゃないですか!これは非常に簡潔な例ですが、コードを記述する際のアロー関数の利点をよく示しています。アロー関数の構文を詳しく見てみましょう:
(parameters) =>{statement }
パラメータがない場合は、さらに簡略化できます: (parameters) => { statements }
如果没有参数,那么可以进一步简化:() => { statements }
如果只有一个参数,可以省略括号:parameters => { statements }
如果返回值仅仅只有一个表达式(expression), 还可以省略大括号:parameters => expression
var funcName = (params) => params + 2 funcName(2); // 4
现在你已经学会了箭头函数的语法,我们来实战一下。打开Chrome浏览器开发者控制台,输入:var double = num => num * 2
我们将变量 double 绑定到一个箭头函数,该函数有一个参数 num , 返回 num * 2 。 调用该函数:
// 等价于: function (parameters){ return expression; }
没有局部 this 的绑定
和一般的函数不同,箭头函数不会绑定 this 。 或则说箭头函数不会改变 this 本来的绑定。
我们用一个例子来说明:
double(2); // 4 double(3); // 6
因为使用了关键字 new 构造,Count()函数中的 this 绑定到一个新的对象,并且赋值给 a 。通过 console.log 打印
function Counter() { this.num = 0; } var a = new Counter();
如果我们想每过一秒将 a.num 的值加1,该如何实现呢?可以使用 setInterval() 函数。
a.num ,会输出0。 console.log(a.num); // 0
我们来看一下输出结果:
function Counter() { this.num = 0; this.timer = setInterval(function add() { this.num++; console.log(this.num); }, 1000); }
你会发现,每隔一秒都会有一个 NaN 打印出来,而不是累加的数字。到底哪里错了呢?
首先使用如下语句停止 setInterval 函数的连续执行: clearInterval(b.timer);
我们来尝试理解为什么出错:根据上一篇博客讲解的规则,首先函数 setInterval 没有被某个声明的对象调用,也没有使用 new 关键字,再之没有使用 bind , call 和 apply 。 setInterval 只是一个普通的函数。实际上 setInterval 里面的 this 绑定到全局对象的。我们可以通过将 this 打印出来验证这一点:
var b = new Counter(); // NaN // NaN // NaN // ...
你会发现,整个 window 对象被打印出来。 使用如下命令停止打印: clearInterval(b.timer);
回到之前的函数,之所以打印 NaN ,是因为 this.num 绑定到 window 对象的 num ,而 window.num 未定义。
那么,我们如何解决这个问题呢?使用箭头函数!使用箭头函数就不会导致 this 被绑定到全局对象。
function Counter() { this.num = 0; this.timer = setInterval(function add() { console.log(this); }, 1000); } var b = new Counter();
通过 Counter 构造函数绑定的 this 将会被保留。在 setInterval 函数中, this 依然指向我们新创建的 b 对象。
为了验证刚刚的说法,我们可以将 Counter 函数中的 this 绑定到 that , 然后在 setInterval 中判断 this 和 that 是否相同。
function Counter() { this.num = 0; this.timer = setInterval(() => { this.num++; console.log(this.num); }, 1000); } var b = new Counter(); // 1 // 2 // 3 // ...
正如我们期望的,打印值每次都是 true 。最后,结束刷屏的打印: clearInterval(b.timer);
() = > { ステートメント }
パラメーターが 1 つだけの場合は、括弧を省略できます:
parameters => { ステートメント }
戻り値が 1 つの式のみの場合 (式)、中かっこを省略することもできます: parameters =>expression
function Counter() {
var that = this;
this.timer = setInterval(() => {
console.log(this === that);
}, 1000);
}
var b = new Counter();
// true
// true
// ...
アロー関数の構文を学習したので、練習してみましょう。 Chrome ブラウザの開発者コンソールを開き、次のように入力します。 var double = num => num * 2
パラメータ num を持つアロー関数に変数 double をバインドし、num*2 を返します。 。 この関数を呼び出します:
ローカルな this バインディングはありません 通常の関数とは異なり、アロー関数は this をバインドしません。 つまり、アロー関数は this の元のバインディングを変更しません。
rrreeeキーワード new を使用して構築するため、Count() 関数の this は新しいオブジェクトにバインドされ、 a に割り当てられます。 console.log を介して出力しますrrreee a.num の値を 1 秒ごとに 1 ずつ増やしたい場合、どうすれば達成できますか? setInterval() 関数を使用できます。 rrreee
出力を見てみましょう:
clearInterval(b.timer);
🎜🎜 エラーが発生した理由を理解してみましょう。前回のブログでは、まず関数 setInterval が使用されません。宣言されたオブジェクトによって呼び出される場合、new キーワードは使用されず、bind、call、apply も使用されません。 setInterval は単なる通常の関数です。実際、setInterval の this はグローバル オブジェクトにバインドされています。これを印刷して確認できます: 🎜rrreee🎜 ウィンドウ オブジェクト全体が印刷されていることがわかります。 印刷を停止するには、次のコマンドを使用します: 🎜clearInterval(b.timer);
🎜🎜前の関数に戻ると、NaN が印刷される理由は、this.num がウィンドウの num にバインドされているためです。オブジェクト、およびウィンドウが定義されていません。 🎜🎜それでは、この問題をどのように解決すればよいでしょうか?アロー関数を使おう!アロー関数を使用しても、これはグローバル オブジェクトにバインドされません。 🎜rrreee🎜Counter コンストラクターを介してバインドされたこのバインドは保持されます。 setInterval 関数では、これは引き続き新しく作成された b オブジェクトを指します。 🎜🎜今述べたことを検証するには、Counter 関数で this を that にバインドし、setInterval で this と that が同じかどうかを判断します。 🎜rrreee🎜 予想どおり、出力される値は常に true です。最後に、画面のスワイプによる印刷を終了します: 🎜clearInterval(b.timer);
🎜🎜 上記は、私が皆さんのためにまとめたものであり、将来的に皆さんのお役に立つことを願っています。 🎜🎜関連記事: 🎜🎜🎜Vue.🎜js🎜計算とリスナー属性の使い方を詳しく解説🎜🎜🎜🎜🎜JSファイルを動的に読み込む3つの方法まとめ🎜🎜🎜🎜🎜🎜js🎜クロスドメインメソッドまとめサポート投稿リクエスト 🎜🎜🎜以上がJavaScriptのアロー関数の詳しい説明(グラフィックチュートリアル)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

JavaScriptは、Webページのインタラクティブ性とダイナミズムを向上させるため、現代のWebサイトの中心にあります。 1)ページを更新せずにコンテンツを変更できます。2)Domapiを介してWebページを操作する、3)アニメーションやドラッグアンドドロップなどの複雑なインタラクティブ効果、4)ユーザーエクスペリエンスを改善するためのパフォーマンスとベストプラクティスを最適化します。

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

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

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

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。
