先端ステップシリーズ(7):実行コンテキストとは?コールスタックとは?
5198 ワード
:Valentino
:https://www.valentinog.com/blog/js-execution-context-call-stack
Javascriptの実行文脈は何ですか?私は賭けをします.あなたは答えが分かりません.
プログラミング言語の一番基本的な構成部分は何ですか?
変数と関数ですか?すべての人はこれらのプレートを学ぶことができます.
基礎知識以外に何がありますか?
自分を中级(または高级)と呼ぶJavascript开発者の前に、あなたが身につけるべきJavascriptの核心は何ですか?
たくさんあります.
Scope( )
、Closure( )
、Callbacks( )
、Prototype( )
など.これらの概念を深く研究する前に、少なくともJavascriptエンジンの動作原理を知るべきです.
この記事では、各Javascriptエンジンの基本部分を紹介します.コンテキストと呼び出しスタックを実行します.
(恐れないでください.あなたが思っているより簡単です.)
準備はできましたか
目次
この文章で勉強します.
Javascriptの内部機能を見ることによって、Javascriptの開発者がより良くなります.たとえ細部を把握できなくても.
今、下のコードを見てみます.
var num = 2;
function pow(num) {
return num * num;
}
このコードはブラウザでどの順番で実行されると思いますか?つまり、ブラウザであれば、コードはどう読みますか?
それは簡単に聞こえる.
多くの人は「はい、ブラウザで機能powを実行して結果を返して、numに2を割り当てます.」
次の部分では、簡単に見えるコード行の背後にある仕組みが見つかります.
Javascriptエンジン
Javascriptがどのようにあなたのコードを実行しているかを知るには、最初に怖いことに出会うべきです.
コンテキストを実行
Javascriptの中で何が実行文脈ですか?
ブラウザ(またはNode)でJavascriptを実行するたびに、エンジンは一連のステップを実行します.
ステップの一つは、グローバル実行コンテキストの作成に関する.
エンジンとは
つまり、JavascriptエンジンはJavascriptコードを実行する「エンジン」です.
今は2つの顕著なJavascriptエンジンがあります.Google V 8とSpider Monkey.
V 8はGoogleのソースであるJavascriptエンジンで、Google ChromeとNodejsで使用されます.
Spidentr MonkeyはMozilaのJavaScriptエンジンであり、Firefoxに使用されます.
今まではJavascriptエンジンと実行文脈があります.
今は彼らがどうやって共同作業をするかを知る時です.
どうやって働いていますか?
Javascriptコードを実行するたびに、エンジンはグローバル実行コンテキストを作成します.
実行コンテキストは、Javascriptコードを実行する環境を記述する比喩語である.
これらの抽象的なものを想像するのは難しいと思います.
グローバル実行コンテキストをボックスとして見なします.
コードをもう一度見てみましょう.
var num = 2;
function pow(num) {
return num * num;
}
エンジンはどうやってコードを読み取りますか?これは簡単なバージョンです.
エンジン:最初の行は変数です.グローバルメモリに保存しましょう.
エンジン:3行目、関数宣言を見ました.私たちもグローバルメモリに保存しましょう.
エンジン:完成したようです.
もう一度お聞きしたいのですが、ブラウザはどうやって以下のコードを見ますか?
はい、ちょっと上から降りてきました.
ご覧のようにエンジンは機能しません.
これは関数ではなく関数宣言です.
上のコードは、大域メモリに格納されたいくつかの値に変換されます.関数宣言と変数.
グローバルメモリ
私はもう実行の文脈に困惑しました.今はグローバルメモリとは何ですか?
次にグローバルメモリとは何かを見てみましょう.
グローバルメモリ
Javascriptエンジンにもグローバルメモリがあります.
グローバルメモリにはグローバル変数と関数宣言が含まれています.
Kyle Simpsonの「ロールドメインとクローズド」を読むと、グローバルメモリとグローバルスコープの概念が重複していることが分かります.
実は彼らは同じことです.
これはなかなか難しい概念です.
でも、今は心配するべきではないです.
私たちの難しい問題の二つの重要な部分を理解してほしいです.
Javascriptエンジンがあなたのコードを実行すると、作成されます.
この点については、
紙の上や原型製作ツールを使って練習ができます.
私の小さい例について、写真は次のように見えます.
次のセクションでは、もう一つの恐ろしいことを見ます.コールスタックです.
コールスタックとは?
実行コンテキストとグローバルメモリとJavascriptエンジンはどのように組み合わせられているかを明確に知っていますか?
もしないなら、前の時間を調べます.
私達は私達の難題の中でもう一つの文章を紹介します.
まず、Javascriptエンジンのコードを実行する時に何が起こるかを振り返ってみましょう.作成:
var num = 2;
function pow(num) {
return num * num;
}
コードは純粋な値割り当てです.もっと進めましょう.
この関数を呼び出したら何が起こりますか?
var num = 2;
function pow(num) {
return num * num;
}
var res = pow(num)
面白い問題Javascriptで関数を呼び出す行為はエンジンに助けを求めます.
このヘルプはJavascriptエンジンの友達から来ました.コールスタックです.
それは明らかに聞こえないかもしれませんが、Javascriptエンジンは発生状況を追跡する必要があります.
それはコールスタックに依存します.
Javascriptのコールスタックは何ですか?
コールスタックは、プログラムの現在実行されているログのようです.
実際には、データ構造:スタックです.
コールスタックの作業原理は何ですか?
案の定、それは2つの方法があります.
プッシュは何かをスタックに入れる行為です.
つまり、Javascriptで関数を実行すると、エンジンはこの関数をスタックにプッシュします.
各関数の呼び出しは、呼び出しスタックにプッシュされます.
pushの最初の事はmain(またはglobal()で、それはJavascriptプログラムが実行する主要なスレッドです.
今、前の写真はこう見えます.
popの他端はスタックから何かを削除する行為です.
関数の実行が終了すると、コールスタックからpopが出ます.
私たちのコールスタックは以下のようになります.
今ですか?そこからJavascriptの概念を把握する準備ができています.
次の部分を見てください.
ローカル実行コンテキスト
今までは、すべてがよくわかっているようです.
Javascriptエンジンがグローバル実行コンテキストとグローバルメモリを作成していることを知っています.
コード内で関数を呼び出すと、
まず、この機能は、グローバル実行コンテキストに現れる.
そして、もう一つのミニコンテキストが関数の隣に現れます.
そのミニコンテキストはローカル実行コンテキストと呼ばれる.
前の画像ではグローバルメモリに新しい変数が現れます.
変数resの値は、まずundefinedです.
その後、powがグローバル実行コンテキストに現れる限り、関数は実行され、レスポンスはその戻り値を取得する.
実行段階では、ローカル実行コンテキストを作成して、ローカル変数を保存します.
この点を覚えてください
グローバルとローカルの実行コンテキストを理解することは、スコープとクローズドを把握するための鍵である.
締め括りをつける
Javascriptエンジンは実行コンテキストを作成し、グローバルメモリとコールスタックを作成します.しかし、関数を呼び出すと、エンジンはローカル実行コンテキストを作成します.
常に無視されているのは、新しい開発者は常にJavascript内部を神秘的なものと見なしています.
しかし、それらは高級Javascript概念を把握する鍵である.
コンテキストを実行すると、グローバルメモリとコールスタックを学習すれば、Scope、Cloures、Callbacksと他のものは簡単になります.
特に、スタックの呼び出しを理解することが重要である.
それを想像すると、Javascriptはすべて意味があります.なぜJavascriptが非同期であるかを最終的に理解します.