JavaScript でのホイスティング: 騙される可能性のある単純な概念
ホイスティングは、JavaScript の面接で最もよく聞かれる質問の 1 つであり、初心者に優しい概念であると考えられています。ただし、その動作は欺瞞的である可能性があり、経験豊富な開発者さえ罠に陥らせる可能性があります。
ホイスティングとは何ですか?
JavaScript におけるホイスティングは、コードの実行前のコンパイル段階で、変数と関数の宣言がそれらを含むスコープ (スクリプトまたは関数) の先頭に移動される動作です。
宣言のみがホイストされ、初期化や代入はホイストされません。
ホイスティングは、変数、関数、クラスに対して異なる動作をします。一つ一つ理解していきましょう。
変数の巻き上げ
var キーワードのホイスティング
- var を使用して宣言された変数はホイストされますが、初期化はそのまま残ります。
console.log(a); // Output: undefined (declaration hoisted, not initialisation) var a = 5; console.log(a); // Output: 5
let および const キーワードのホイスティング
- let および const で宣言された変数もホイストされますが、「一時的なデッド ゾーン」のため、宣言前はアクセスできません。
console.log(b); // ReferenceError: Cannot access 'b' before initialisation console.log(c); // ReferenceError: Cannot access 'c' before initialisation let b = 10; const c = 'alphabet';
機能のホイスト
- 関数宣言は完全にホイストされています。つまり、関数が定義される前に関数を呼び出すことができます。
greet(); // Output: Hello! function greet() { console.log("Hello!"); }
- 関数式 (var、let、または const を使用) は完全にはホイストされていません。変数宣言のみがホイストされ、代入はホイストされません。
sayHello(); // TypeError: sayHello is not a function var sayHello = function() { console.log("Hello!"); };
クラス引き上げ
- クラスは関数と同じ方法ではホイストされません。宣言する前にクラスを使用すると、ReferenceError が発生します。
const obj = new MyClass(); // ReferenceError: Cannot access 'MyClass' before initialisation class MyClass { constructor() { console.log("Hello from MyClass!"); } }
覚えておくと良いでしょう
ホイスティングは、変数または関数が定義されているスコープ内で発生します。関数内で宣言された変数は、その関数のスコープの先頭にホイストされます。
let と const の場合、ブロックの先頭から変数の宣言に遭遇するまで、「一時的なデッド ゾーン」が存在します。この期間中に変数にアクセスすると ReferenceError がスローされます。
従うべきいくつかのベストプラクティス
混乱やバグを避けるために、変数と関数はスコープの先頭で宣言してください。
最新の JavaScript では var の使用を避けてください。 let と const を優先します。
エラーを避けるために、関数宣言と式の違いを理解します。
追加情報
時間的デッドゾーン(TDZ)とは何ですか?
- 時間的デッド ゾーン (TDZ) は、変数のスコープの開始からコード内での宣言までの時間です。この期間中に変数にアクセスすると ReferenceError がスローされます。
TDZ はなぜ存在するのでしょうか?
- 予測可能な動作
TDZ は、変数が適切に宣言され初期化されるまで変数が使用されないようにします。
一般的なバグの防止
TDZ がないと、初期化前に変数に未定義または意図しない値が含まれる可能性があり、デバッグが難しい問題が発生します。
宣言型コードを推奨します
TDZ は使用前に変数を宣言することを要求することで、より明確で構造化されたコードを促進します。
ホイスティングは単純な概念のように思えるかもしれませんが、そのニュアンスは経験豊富な開発者でも不意を突かれる可能性があります。宣言が内部でどのように処理されるかを理解することで、よりクリーンで予測可能なコードを作成し、面接での難しい質問に答えることができます。基本をマスターすることが JavaScript プロになるための第一歩であることを覚えておいてください。コーディングを楽しんでください!
以上がJavaScript でのホイスティング: 騙される可能性のある単純な概念の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

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

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











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

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

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

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。
