この記事では、ECMA Javascript について詳しく説明します (例を示します)。必要な方は参考にしていただければ幸いです。
これは実際には、関数が呼び出されたときに発生するバインディングです。それが何を指すかは、関数が呼び出される場所 (つまり、関数がどのように呼び出されるか) によって決まります。
4 つのルール: (知らない JS)
1. デフォルトのバインディング
function foo() { console.log( this.a ); } var a = 2; foo(); // 2
厳密かどうかモードでは、グローバル実行コンテキスト (関数本体の外側) で、これはグローバル オブジェクトを参照します。 (MDN)
厳密モードでは、実行コンテキストに入ったときにその値が保持されます。これが実行コンテキストによって定義されていない場合は、未定義のままになります。 (MDN)
function foo() { "use strict"; console.log( this.a ); } var a = 2; foo(); // TypeError: this is undefined
2. 暗黙的なバインディング/損失
関数がオブジェクト内のメソッドとして呼び出される場合、this は関数を呼び出すオブジェクトであり、バインディングは影響を受けるだけです。最も近いメンバー参照の。 (MDN)
//隐式绑定 function foo() { console.log( this.a ); } var obj2 = { a: 42, foo: foo }; var obj1 = { a: 2, obj2: obj2 }; obj1.obj2.foo(); // 42
//隐式丢失 function foo() { console.log( this.a ); } function doFoo(fn) { // fn 其实引用的是 foo fn(); // <h2 id="バインディングの表示">3. バインディングの表示</h2><p> this の値をあるコンテキストから別のコンテキストに渡す場合は、call メソッドまたは apply メソッドを使用する必要があります。 (MDN)<br>f.bind(someObject) を呼び出すと、f と同じ関数本体とスコープを持つ関数が作成されますが、この新しい関数では、この関数がどのような方法であっても、これは永続的にバインドの最初のパラメーターにバインドされます。と呼ばれます。 </p><pre class="brush:php;toolbar:false">var obj = { count: 0, cool: function coolFn() { if (this.count <h3 id="ハード-バインディング">ハード バインディング</h3><p>すべてのパラメータを渡し、受け取ったすべての値を返すラッパー関数を作成します。 <br>ハード バインディングを使用すると、関数の柔軟性が大幅に低下します。ハード バインディングを使用した後は、暗黙的バインディングまたは明示的バインディングを使用してこれを変更することはできません。 </p><pre class="brush:php;toolbar:false">// 简单的辅助绑定函数 function bind(fn, obj) { return function() { return fn.apply( obj, arguments ); }; }
ソフト バインディング
デフォルト バインディングにグローバル オブジェクトと未定義以外の値を指定すると、暗黙的バインディングまたは明示的バインディングの機能を維持しながらハード バインディングと同じ効果を実現できます。これを変更するバインディングの。
Function.prototype.softBind = function(obj) { var fn = this; var curried = [].slice.call( arguments, 1 );// 捕获所有 curried 参数 var bound = function() { return fn.apply( (!this || this === (window || global))?obj : this curried.concat.apply( curried, arguments ) ); }; bound.prototype = Object.create( fn.prototype ); return bound; };
4. 新しいバインディング
関数がコンストラクターとして使用される場合 (new キーワードを使用)、this は構築される新しいオブジェクトにバインドされます。 (MDN)
new を使用して関数を呼び出すか、コンストラクター呼び出しが発生すると、次の操作が自動的に実行されます (不明な JS)
Create (または構築) 完全に新しいオブジェクト。
この新しいオブジェクトは、[[ プロトタイプ ]] を実行することで接続されます。
この新しいオブジェクトは、関数呼び出しの this にバインドされます。
関数が他のオブジェクトを返さない場合、新しい式の関数呼び出しは自動的にこの新しいオブジェクトを返します。
function foo(a) { this.a = a; } var bar = new foo(2); console.log( bar.a ); // 2
4 つのルールの優先順位
新しいバインディング>暗黙的なバインディング
-
関数は新しい(新しいバインディング)で呼び出されますか?そうである場合、これは新しく作成されたオブジェクトにバインドされます。
var bar = new foo()
-
関数は呼び出し、適用 (明示的バインディング)、またはハード バインディングによって呼び出されますか?そうである場合、これは指定されたオブジェクトにバインドされます。
さらに: バインディングが null または未定義の場合、実際にはデフォルトのバインディング ルールが適用されます。var bar = foo.call(obj2)
-
関数はコンテキスト オブジェクトで呼び出されますか (暗黙的にバインドされています)?そうである場合、これはそのコンテキスト オブジェクトにバインドされます。
var bar = obj1.foo()
-
どちらでもない場合は、デフォルトのバインディングを使用します。厳密モードの場合は unknown にバインドされ、それ以外の場合はグローバル オブジェクトにバインドされます。
var bar = foo()
その中には次のものが含まれます: 間接参照関数にはデフォルトのバインディング ルールが適用されます
function foo() { console.log( this.a ); } var a = 2; var o = { a: 3, foo: foo }; var p = { a: 4 }; o.foo(); // 3 (p.foo = o.foo)(); // 2
Exceptions
##1. アロー関数
アロー関数は、この 4 つの標準ルールを使用しませんが、外部 (関数またはグローバル) スコープに基づいてこれを決定します。アロー関数では、これはそれを囲む字句コンテキストの this と一致します。 (MDN)
アロー関数は、(this が何にバインドされているかに関係なく) 外部関数呼び出しの this バインディングを継承します。これは実は self = this と同じ仕組みです。
アロー関数のバインディングは変更できません。
2.nodejs
setTimeout(function() { console.log(this) //浏览器中:window //nodejs中:Timeout实例 }, 0)
その他の説明
https://www.zhihu.com/questio...func(p1, p2) は
func.call(unknown, p1, p2) と同等です
obj.child と同等です.method.call(obj.child, p1, p2)
例
var number = 50; var obj = { number: 60, getNum: function () { var number = 70; return this.number; } }; alert(obj.getNum()); alert(obj.getNum.call()); alert(obj.getNum.call({number:20}));
以上がECMA Javascript についての深い理解 (例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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の使用、閉鎖の過度の使用の回避が含まれます。

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

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

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