この記事は、JavaScript スコープの包括的な分析 (コード付き) を提供します。これには特定の参考値があります。必要な友人は参照できます。お役に立てば幸いです。ヘルプ。
スコープは変数のライフサイクルと可視性を決定します。変数はスコープの外では見えません。
JavaScript のスコープには、モジュール スコープ、関数スコープ、ブロック スコープ、字句スコープ、グローバル スコープが含まれます。
グローバル スコープ
関数、ブロック、またはモジュールのスコープ外で定義された変数には、グローバル スコープがあります。グローバル変数はプログラム内のどこからでもアクセスできます。
モジュール システムが有効になっている場合、グローバル変数の作成はより困難になりますが、それでも実行できます。関数の外で宣言する必要がある変数を HTML で定義できるため、グローバル変数を作成できます。
<script> let GLOBAL_DATA = { value : 1}; </script> console.log(GLOBAL_DATA);
モジュール システムがない場合、グローバル変数の作成がはるかに簡単になります。ファイル内の関数の外で宣言された変数はグローバル変数です。
グローバル変数は、プログラムのライフサイクル全体を通じて実行されます。
グローバル変数を作成する別の方法は、プログラム内の任意の場所で window
グローバル オブジェクトを使用することです。
window.GLOBAL_DATA = { value: 1 };
この方法では、GLOBAL_DATA
変数は次のようになります。どこにでも 。
console.log(GLOBAL_DATA)
しかし、このアプローチが良くないこともわかっています。
モジュール スコープ
モジュールが有効になっていない場合、すべての関数の外で宣言された変数はグローバル変数になります。モジュールでは、関数の外で宣言された変数は隠されており、明示的にエクスポートしない限り、他のモジュールでは使用できません。
エクスポートにより、関数またはオブジェクトを他のモジュールで使用できるようになります。この例では、モジュール ファイル sequence.js
から関数をエクスポートしました。
// in sequence.js export { sequence, toList, take };
現在のモジュールは、インポートすることで他のモジュールの関数やオブジェクトを使用できます。
import { sequence, toList, toList } from "./sequence";
モジュールは、インポートされたデータを入力として受け取り、エクスポートされたデータを返す自動的に実行される関数としてある程度考えることができます。
関数スコープ
関数スコープとは、関数内で定義されたパラメーターと変数が関数内のどこにでも表示されるが、関数の外部には表示されないことを意味します。
次は、IIFE と呼ばれる自動実行される関数です。
(function autoexecute() { let x = 1; })(); console.log(x); //Uncaught ReferenceError: x is not defined
IIFE は、関数式の即時呼び出しを意味します。これは、定義直後に実行される関数です。
var
で宣言された変数には関数スコープのみがあります。さらに重要なのは、var
で宣言された変数はスコープの最上位に昇格されることです。こうすることで、宣言する前にアクセスできるようになります。次のコードを見てください:
function doSomething(){ console.log(x); var x = 1; } doSomething(); //undefined
このようなことは let
では起こりません。 let
で宣言された変数は、定義された後でのみアクセスできます。
function doSomething(){ console.log(x); let x = 1; } doSomething(); //Uncaught ReferenceError: x is not defined
var
で宣言された変数は、同じスコープ内で複数回再宣言できます:
function doSomething(){ var x = 1 var x = 2; console.log(x); } doSomething();
使用 let
または const
宣言された変数を同じスコープ内で再宣言することはできません。
function doSomething(){ let x = 1 let x = 2; } //Uncaught SyntaxError: Identifier 'x' has already been declared
var
は廃止され始めているため、これについては気にしなくてもよいかもしれません。
ブロック スコープ
ブロック スコープは中括弧で定義されます。 {
と }
で区切られます。
および const
で宣言された変数はブロック スコープによって制約され、変数が定義されているブロック内でのみアクセスできます。
ブロック スコープに関する次のコードを考えてみましょう: <pre class="brush:php;toolbar:false">let x = 1;
{
let x = 2;
}
console.log(x); //1</pre>
対照的に、
宣言はブロック スコープによって束縛されません: <pre class="brush:php;toolbar:false">var x = 1;
{
var x = 2;
}
console.log(x); //2</pre>
もう 1 つの一般的な問題は、ループ内で
のような非同期操作を使用することです。次のループ コードは、数字 5 を 5 回表示します。 <pre class="brush:php;toolbar:false">(function run(){
for(var i=0; i</pre>
宣言を含む for
ループ ステートメントは、ループするたびに新しい変数を作成し、ブロック スコープに設定します。コードの次のループでは、0 1 2 3 4 5
が表示されます。 <pre class="brush:php;toolbar:false">(function run(){
for(let i=0; i</pre>
字句スコープ
字句スコープとは、内部関数が定義されている外部スコープにアクセスするための内部関数の機能です。
このコードを見てください:
(function autorun(){ let x = 1; function log(){ console.log(x); }; function run(fn){ let x = 100; fn(); } run(log);//1 })();log
この関数はクロージャです。これは、run()
関数の x
変数ではなく、親関数 autorun()
の #xx 変数を参照します。
クロージャー関数は、それ自体のスコープではなく、それが作成されたスコープにアクセスできます。
autorun()
のローカル関数スコープは、log() 関数の字句スコープです。
スコープ チェーン
次の例を見てください:
let x0 = 0; (function autorun1(){ let x1 = 1; (function autorun2(){ let x2 = 2; (function autorun3(){ let x3 = 3; console.log(x0 + " " + x1 + " " + x2 + " " + x3);//0 1 2 3 })(); })(); })();
内部関数
autorun3()
x3 変数にアクセスできます。変数
x1 と
x2 およびグローバル変数
x0 は、外部関数からもアクセスできます。
変数が見つからない場合、厳密モードではエラーが返されます。
"use strict"; x = 1; console.log(x) //Uncaught ReferenceError: x is not defined非厳格モードは「いい加減モード」とも呼ばれ、グローバル変数を急いで作成します。
x = 1; console.log(x); //1概要グローバル スコープで定義された変数は、プログラム内のどこでも使用できます。
モジュールでは、関数の外で宣言された変数は隠されており、明示的にエクスポートしない限り他のモジュールで使用できません。
関数スコープとは、関数内で定義されたパラメーターと変数が関数内のどこでも参照できることを意味します。
変数は let
および const
で宣言されます。 ブロック スコープがあります。 。 var
にはブロック スコープがありません。
【関連する推奨事項: JavaScript ビデオ チュートリアル ]
以上がJavaScript スコープの包括的な分析 (コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

Pythonはデータサイエンスや機械学習により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、簡潔な構文とリッチライブラリエコシステムで知られており、データ分析とWeb開発に適しています。 2。JavaScriptは、フロントエンド開発の中核です。 node.jsはサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

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

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

Dreamweaver Mac版
ビジュアル Web 開発ツール
