関数の範囲とこのポインティングは、JSの非常に重要な部分です。このことを明確にし、私の論理がどのようになっているかを見るには論理が必要です...
以下は、読むことに興味のあるアイテムを直接選択できる概要です。
•関数定義方法:直接定義(ウィンドウ、内部定義の下)、オブジェクトメソッド、オブジェクトプロトタイプメソッド。
•関数呼び出し方法:直接電話、呼び出し/適用、
•直接定義された関数とオブジェクトの方法の場合、スコープはデフォルトで定義のスコープチェーンです。
•直接定義された機能の場合、これはウィンドウを指します。
•オブジェクトの方法では、これはインスタンス化されたオブジェクトを指します(インスタンス化されたオブジェクトがデフォルトでこれを返す場合に対応)。
•コール/適用を使用して、このメソッドのポインティングを変更する
•関数またはメソッドを定義する場合、そのスコープチェーンはで変更できます。
以下で詳細に説明しましょう。
アウトラインに記載されているように、関数の定義は、直接定義(ウィンドウ、内部定義)、オブジェクトメソッド(またはオブジェクトプロトタイプメソッド)の2つのタイプに分けることができます。次の例コードから、関数FN1とFN2とオブジェクトのデス機能が、関数が名前を使用するときに対応するドメインからであることがわかります。
var name = 'window <br/>'; var resultcon; function fn1(){resultcon.innerhtml += name;} function myobj(){var name = 'name now buyd bouth bourd by <br/>'; this.dofunction = function(){resultcon.innerhtml += name;名前の値を使用するときに「名前」が「this.name」に置き換えられた場合はどうなりますか?次の例を参照してください。
var name = 'window <br/>'; var resultcon; function fn1(){resultcon.innerhtml += this.name;} function myobj(){var name = 'name buse buys buys buly <br/>'; this.dofunction = function(){resultcon.innerhtml += this.name;結果から判断すると、アウトラインの4番目と5番目のアイテムを検証できます。また、これとスコープは、独立した変数クエリロジックに従って、2つの個別のチェーンセットであることがわかります。特定のクエリロジックは、次のパフォーマンス分析で言及されます。あなたが初心者の場合は、まず「JSスコープチェーン」の基本的な知識を調べることをお勧めします。
関数の呼び出し方法については、次の例を使用して、アウトラインの2番目と6番目の記事を説明します。
var name = 'window <br/>'; var resultcon; function fn1(){resultcon.innerhtml += this.name;} function myobj(){var name = 'name buse buys buys buly <br/>'; this.dofunction = function(){resultcon.innerhtml += this.name;呼び出しの場合、呼び出されたときに適用されるのは、呼び出された関数のこのポインティングを変更することです。の使用は、呼び出された関数の変数のクエリドメインを変更することです。上記の例で呼び出しと名前を削除し、withの関数を実証するために追加します。
var name = 'window <br/>'; var resultcon; function fn1(myscope){with(myscope){resultcon.innerhtml += name; }} function myobj(myscope){var name = 'name now buyd buys buly <br/>';使用するのは便利ではなく、呼び出された関数に追加する必要があります。一部の人々は、呼び出された関数を変更せずに変数全体の範囲を変更するために次のことを呼び出すことができるかどうか疑問に思うかもしれません。
with(myscope){fn1(); fn2(); var obj = new Myobj(); obj.dofunction();}残念ながら、いいえ!したがって、一部の成熟したフレームワークのどこでも通話と応用を使用できますが、使用することはめったにありません。 Jshintを使用してJS構文を検出すると、小さな赤い点がマークされます。いくつかのJSエンコーディングガイダンスでは、変数のデフォルトクエリチェーンを変更すると、後のメンテナンス担当者といくつかのパフォーマンスに関する考慮事項を混同するため、可能な限り使用することもお勧めします。慎重に一緒に使用してください。
上記の記事は範囲を深く理解しており、JS関数のこの方向は私があなたと共有するすべてのコンテンツです。私はそれがあなたに参照を与えることができることを願っています、そしてあなたがwulin.comをもっとサポートできることを願っています。