数週間前、私はループ内での非同期関数の呼び出しによる影響をオフにする方法と、この問題に対処するいくつかの方法について書きました。
最近のコーディングで、もっと簡単な方法を発見しました。その過程で、匿名関数が削除され、「関数をループ内に記述しないでください」という lint エラーが削除されます。
ご存知のとおり、私は JavaScript で bind()
を試してきました。バインドは、数週間前に述べたクロージャ問題への対処など、さまざまな状況で使用できることがわかりました。 bind()
试验。事实证明,我们可以在多个场合,包括处理我几周前提到的闭包问题中,使用bind。
什么是bind()?
bind函数最近才添加到JavaScript的规范说明中,所以它只能工作于最新的浏览器上。你可以查看兼容性表看看哪些浏览器实现bind()
以及其他JavaScript功能。我仔细地看了看名单,我关注的浏览器没有不支持bind()
的。当然你的情况可能会有所不同。
bind所做的就是自动封装函数在函数自己的闭包中,这样我们可以捆绑上下文(this关键字)和一系列参数到原来的函数。
你最终得到的是另一个函数指针。
function add(a,b){ return a + b; } var newFoo = add.bind(this,3,4);
请注意,我们不仅捆绑this到foo()
函数,而且我们也捆绑了两个参数。所以,当我们调用newFoo()
的时候,返回值将是7。
但是,如果我们在调用之前newFoo更改的参数的话,会发生什么?
更改bind参数
如果我们使用变量绑定参数到foo()
,然后在调用newFoo()
前改变变量,你觉得值会变为什么呢?
function add(a,b){ return a + b; } var a = 3; var b = 4; var newFoo = add.bind(this,a, b); a = 6; b = 7; console.log(newFoo());
返回值仍然是7,因为bind()绑定的是参数的值,而不是实际变量的值。
这是好消息,就像我说的,我们可以在代码中利用这个巨大的优势。但是,对我而言它最有用的地方是在callbacks中。
bind和callbacks
还记得那篇文章中我们在循环中处理callbacks的解决方案之一就是,围绕我们想要调用的函数创建匿名函数。
for(var i = 0;i < 10;i++){ (function(ii){ setTimeout(function(){ console.log(ii); },1000); })(i);
但是我们可以使用bind,大大简化代码。
function consoleLog(i){ console.log(i); } for(var i = 0;i < 10;i++){ setTimeout(consoleLog.bind(this,i),1000); }
这是因为每次调用bind就会给出一个新的函数指针,并且保留原来的函数不变。
同时,我们还删除了linting错误“不要在循环写函数”,因为我们不是在循环中创造的函数,我们只是指向了我们在循环外创建的函数。
bind用于事件处理程序
bind()
bind()
やその他の JavaScript 機能を実装しているかを確認できます。リストを注意深く調べてみましたが、気になるブラウザのどれも bind()
をサポートしていませんでした。もちろん、あなたの状況は異なるかもしれません。 bind が行うことは、関数を独自のクロージャに自動的にカプセル化し、コンテキスト (このキーワード) と一連のパラメーターを元の関数にバインドできるようにすることです。 最終的に得られるのは、別の関数ポインターです。 function ClassName(){ this.eventHandler = (function(){ }).bind(this); }これを
foo()
関数にバンドルしているだけでなく、2 つのパラメータもバンドルしていることに注意してください。したがって、newFoo()
を呼び出すと、戻り値は 7 になります。 しかし、newFoo を呼び出す前にパラメータを変更したらどうなるでしょうか? バインドパラメータを変更する変数を使用してパラメータを foo()
にバインドし、newFoo()
を呼び出す前に変数を変更する場合、どうしますか値が変わると思いますか? 🎜function add(a,b,c) { return a+b+c; } var addAgain = add.bind(this, 1, 2); var result = addAgain(3);🎜bind() は実際の変数の値ではなくパラメーターの値をバインドするため、戻り値は 7 のままです。 🎜🎜これは良いニュースです。先ほども言いましたが、この大きな利点をコードで活用できます。ただし、私にとって最も役立つのはコールバックです。 🎜🎜バインドとコールバック🎜🎜 その記事から、ループ内でコールバックを処理するための解決策の 1 つは、呼び出したい関数の周囲に匿名関数を作成することであったことを思い出してください。 🎜rrreee🎜しかし、バインドを使用するとコードを大幅に簡素化できます。 🎜rrreee🎜これは、bind を呼び出すたびに新しい関数ポインターが与えられ、元の関数は変更されないままになるためです。 🎜🎜同時に、「ループ内に関数を書かないでください」という lint エラーも削除しました。これは、ループ内に関数を作成したのではなく、ループの外で作成した関数を指しているだけだからです。 🎜🎜イベント ハンドラーのバインド🎜🎜
bind()
を使用してコードをクリーンにできるもう 1 つの場所は、イベント ハンドラーです。イベント ハンドラーが呼び出されるとき、イベント ハンドラーが作成されたオブジェクトではなく、イベントが生成されたコンテキストにアクセスすることは誰もが知っている、または知っておくべきです。バインドを使用すると、関数が正しいコンテキストで確実にアクセスされるようになります。 🎜rrreee🎜そのようなコードを書くべきだと言っているのではなく、要点を説明するだけです。 🎜🎜カレー🎜🎜え? ! 🎜🎜わかりました。私の関数型プログラミングの知識が限られていることを最初に認めておきます。私がカリー化について与えることができる最良の定義は、複数のステップでパラメータを渡すことができるということです。 🎜🎜バインドを使用すると、次のようなコードを記述してカリー化を実装できます: 🎜rrreee🎜上記は、コードをクリーンにするための JavaScript での binding() メソッドの使用方法の詳細な紹介です。詳細については、PHP に注目してください。中国語のウェブサイト (www.php .cn)! 🎜🎜
🎜
node.jsは、主にストリームのおかげで、効率的なI/Oで優れています。 ストリームはデータを段階的に処理し、メモリの過負荷を回避します。大きなファイル、ネットワークタスク、リアルタイムアプリケーションの場合。ストリームとTypeScriptのタイプの安全性を組み合わせることで、パワーが作成されます

PythonとJavaScriptのパフォーマンスと効率の違いは、主に以下に反映されています。1)解釈された言語として、Pythonはゆっくりと実行されますが、開発効率が高く、迅速なプロトタイプ開発に適しています。 2)JavaScriptはブラウザ内の単一のスレッドに限定されていますが、マルチスレッドおよび非同期I/Oを使用してnode.jsのパフォーマンスを改善でき、両方とも実際のプロジェクトで利点があります。

JavaScriptは1995年に発信され、Brandon Ikeによって作成され、言語をCに実現しました。 2。JavaScriptのメモリ管理とパフォーマンスの最適化は、C言語に依存しています。 3. C言語のクロスプラットフォーム機能は、さまざまなオペレーティングシステムでJavaScriptを効率的に実行するのに役立ちます。

JavaScriptはブラウザとnode.js環境で実行され、JavaScriptエンジンに依存してコードを解析および実行します。 1)解析段階で抽象的構文ツリー(AST)を生成します。 2)ASTをコンパイル段階のバイトコードまたはマシンコードに変換します。 3)実行段階でコンパイルされたコードを実行します。

PythonとJavaScriptの将来の傾向には、1。Pythonが科学コンピューティングの分野での位置を統合し、AI、2。JavaScriptはWebテクノロジーの開発を促進します。どちらもそれぞれのフィールドでアプリケーションシナリオを拡大し続け、パフォーマンスをより多くのブレークスルーを行います。

開発環境におけるPythonとJavaScriptの両方の選択が重要です。 1)Pythonの開発環境には、Pycharm、Jupyternotebook、Anacondaが含まれます。これらは、データサイエンスと迅速なプロトタイピングに適しています。 2)JavaScriptの開発環境には、フロントエンドおよびバックエンド開発に適したnode.js、vscode、およびwebpackが含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。

はい、JavaScriptのエンジンコアはCで記述されています。1)C言語は、JavaScriptエンジンの開発に適した効率的なパフォーマンスと基礎となる制御を提供します。 2)V8エンジンを例にとると、そのコアはCで記述され、Cの効率とオブジェクト指向の特性を組み合わせて書かれています。3)JavaScriptエンジンの作業原理には、解析、コンパイル、実行が含まれ、C言語はこれらのプロセスで重要な役割を果たします。

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


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

Dreamweaver Mac版
ビジュアル Web 開発ツール

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

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

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

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

ホットトピック









