目次
プロモーション動作
分析例
概要
ホームページ ウェブフロントエンド jsチュートリアル JavaScript のリフティング動作と原理の分析

JavaScript のリフティング動作と原理の分析

Feb 28, 2017 pm 02:43 PM
javascript

JavaScript を学んだばかりの学生にとって、その動作の一部は混乱するかもしれません

学校で学んだ C/C++ とは大きく異なります
たとえば、この場合

a = 1;var a;console.log(a);// 1
ログイン後にコピー

一部の学生は、そうすべきだと考えるかもしれませんはい、var a が a に再割り当てされているようです
これが再び当てはまる場合は

console.log(a);// undefinedvar a = 1;
ログイン後にコピー

a が宣言される前に出力されるため、エラーであるか、ブラウザの動作に基づいて 2 が出力されるはずです上記
ただし、結果は未定義です

表示されるコードの順序は、必ずしも JS エンジンによって実際に実行される順序とは限りません
これが、今日話したい JavaScript の改善動作です
実は、この記事の執筆はプリコンパイルの補足です知識
読む前に プリコンパイルについて知らない方は、以下をクリックしてください
JavaScriptのプリコンパイル
JavaScriptのプリコンパイルはプロモーション動作に直結します

プロモーション動作

実際、プリコンパイルを理解した後、理由を明確に理解する
実行前にプリコンパイルが発生する Compile
したがって、これら 2 つのコード ブロックを実行するときは、次のようなコードを実行するのと同じです

var a;a = 1;console.log(a);// 1
ログイン後にコピー
var a;console.log(a);// undefineda = 1;
ログイン後にコピー

この昇格動作については、次の 2 つの文を覚えておいてください
変数宣言の昇格、関数宣言全体の昇格
もう一度強調します

function demo(){….}这才叫做函数声明 
var demo = function(){….}这不叫函数声明
ログイン後にコピー

実際、プリコンパイルの原理を理解していれば、プロモーション動作は簡単に理解できます

私たちは var a = 1 をステートメントとして扱うことに慣れていますvar a = 1 看做一个声明
可是js引擎却不这么认为,它会把它拆成var = a声明 与 a = 1しかし、JS エンジンはそうは考えず、それを var = a に分割します。宣言は a = 1 で初期化されます
、最初はコンパイル段階のタスクであり、 2 つ目は実行フェーズのタスクです
したがって、宣言がスコープ内にどのようなものであっても、実行前にすべての場所が事前に処理されます
これは、変数宣言と関数宣言をスコープの先頭に移動するのと同じです
このプロセスはリフティング

プログラミングプロセス中に、同じ名前の関数や通常の変数はもちろんのこと、変数を重複して宣言してはなりません
ちなみに、スコープの先頭に var を付けて変数を宣言するのは良い習慣です(単一変数原則)
このようにして、昇進行動について心配する必要はありません

分析例

それでも、面接の質問の焦点でもあるこのプロセスを理解する必要があります
古い質問を見てみましょう-流行の例を見てみましょう

function a(a, b){
    console.log(a);    console.log(c);
    c = 0;    console.log(b);
    var c;
    a = 3;
    b = 2;    console.log(a);    console.log(c);    console.log(b);    function b(){};
    console.log(b);
}
a(1);
ログイン後にコピー

混乱しているかも知れませんが、abc がたくさんあります
正解は次のとおりです:

1   undefined    function b(){}    3    0    2    2
ログイン後にコピー

ところで、まずプリコンパイルから分析しましょう

  1. AO オブジェクト (アクティブ オブジェクト) を作成します。

  2. 関数内の仮パラメーターと変数宣言を検索します。 仮パラメーター名と変数名は、AO オブジェクトの属性として使用されます

  3. 。実パラメータと仮パラメータは統一されており、実パラメータの値が仮パラメータに代入されます

  4. 関数宣言を見つけて、関数名はAOオブジェクトの属性として使用され、その値が関数参照になります

最後の関数 a が実行される前 生成された AO オブジェクトは次のようになります

//伪代码AO->{
    a: 1
    b: function(){}
    c: undefined}
ログイン後にコピー

したがって、このような関数を実行することと同じです
(関数名 a は内部の変数と競合しません)

function a(){    var a = 1;    var b = function(){};    var c;

    console.log(a);//1
    console.log(c);//undefined
    c = 0;
    console.log(b);//function(){}
    a = 3;
    b = 2;
    console.log(a);//3
    console.log(c);//0
    console.log(b);//2
    console.log(b);//2}
ログイン後にコピー

それで答えが得られます簡単に

変数宣言と関数宣言が同じ名前の場合
関数宣言が変数宣言をオーバーライドする必要があります(JavaScript関数はさまざまな権限の最初の市民です)
変数宣言が同じ名前の場合別の変数宣言として
、または関数宣言が別の関数宣言と同じ名前を持つ
それが誰です。文書の下で誰が優先権を持ちますか

概要

上記は、今日皆さんに共有する JavaScript のプロモーション動作です
2 つの文で要約します: 変数宣言の促進、全体的な関数宣言の促進
実際には、これは JS エンジンのプリコンパイルによって引き起こされる避けられない動作です

上記は JavaScript の改善動作と原則の分析です。 PHP 中国語 Web サイト (www.php.cn)!


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 Dec 17, 2023 pm 02:54 PM

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 はじめに: 技術の継続的な発展により、音声認識技術は人工知能の分野の重要な部分になりました。 WebSocket と JavaScript をベースとしたオンライン音声認識システムは、低遅延、リアルタイム、クロスプラットフォームという特徴があり、広く使用されるソリューションとなっています。この記事では、WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法を紹介します。

WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー Dec 17, 2023 pm 05:30 PM

WebSocketとJavaScript:リアルタイム監視システムを実現するためのキーテクノロジー はじめに: インターネット技術の急速な発展に伴い、リアルタイム監視システムは様々な分野で広く利用されています。リアルタイム監視を実現するための重要なテクノロジーの 1 つは、WebSocket と JavaScript の組み合わせです。この記事では、リアルタイム監視システムにおける WebSocket と JavaScript のアプリケーションを紹介し、コード例を示し、その実装原理を詳しく説明します。 1.WebSocketテクノロジー

WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 Dec 17, 2023 am 09:39 AM

WebSocket と JavaScript を使用してオンライン予約システムを実装する方法 今日のデジタル時代では、ますます多くの企業やサービスがオンライン予約機能を提供する必要があります。効率的かつリアルタイムのオンライン予約システムを実装することが重要です。この記事では、WebSocket と JavaScript を使用してオンライン予約システムを実装する方法と、具体的なコード例を紹介します。 1. WebSocket とは何ですか? WebSocket は、単一の TCP 接続における全二重方式です。

JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 Dec 17, 2023 pm 12:09 PM

JavaScript と WebSocket を使用してリアルタイム オンライン注文システムを実装する方法の紹介: インターネットの普及とテクノロジーの進歩に伴い、ますます多くのレストランがオンライン注文サービスを提供し始めています。リアルタイムのオンライン注文システムを実装するには、JavaScript と WebSocket テクノロジを使用できます。 WebSocket は、TCP プロトコルをベースとした全二重通信プロトコルで、クライアントとサーバー間のリアルタイム双方向通信を実現します。リアルタイムオンラインオーダーシステムにおいて、ユーザーが料理を選択して注文するとき

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 Dec 17, 2023 pm 05:13 PM

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 はじめに: 今日、天気予報の精度は日常生活と意思決定にとって非常に重要です。テクノロジーの発展に伴い、リアルタイムで気象データを取得することで、より正確で信頼性の高い天気予報を提供できるようになりました。この記事では、JavaScript と WebSocket テクノロジを使用して効率的なリアルタイム天気予報システムを構築する方法を学びます。この記事では、具体的なコード例を通じて実装プロセスを説明します。私たちは

簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 Jan 05, 2024 pm 06:08 PM

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

JavaScript で HTTP ステータス コードを簡単に取得する方法 JavaScript で HTTP ステータス コードを簡単に取得する方法 Jan 05, 2024 pm 01:37 PM

JavaScript で HTTP ステータス コードを取得する方法の紹介: フロントエンド開発では、バックエンド インターフェイスとの対話を処理する必要があることが多く、HTTP ステータス コードはその非常に重要な部分です。 HTTP ステータス コードを理解して取得すると、インターフェイスから返されたデータをより適切に処理できるようになります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法と、具体的なコード例を紹介します。 1. HTTP ステータス コードとは何ですか? HTTP ステータス コードとは、ブラウザがサーバーへのリクエストを開始したときに、サービスが

JavaScriptでinsertBeforeを使用する方法 JavaScriptでinsertBeforeを使用する方法 Nov 24, 2023 am 11:56 AM

使用法: JavaScript では、insertBefore() メソッドを使用して、DOM ツリーに新しいノードを挿入します。このメソッドには、挿入される新しいノードと参照ノード (つまり、新しいノードが挿入されるノード) の 2 つのパラメータが必要です。

See all articles