JavaScript のスコープとブロックレベルのスコープ
この記事では、JavaScript のスコープとブロックレベルのスコープについて紹介します。スコープは変数とパラメーターの可視性とライフサイクルを制御するため、どのプログラミング言語でも常に最優先されます。 Javascript のスコープとブロックレベルのスコープを紹介します。必要な方は参考にしてください。
1. ブロックレベルのスコープの説明
JavaScript の変数スコープを学ぶ前に、いくつかの点を明確にする必要があります: a. JavaScript の変数スコープは、独自のスコープ チェーンに基づいています。 b. JavaScript にはブロックレベルのスコープがありません。 c. 関数内で宣言された変数は、関数全体で定義されます。 JavaScript の変数スコープは、一般的に使用される C 系言語とは異なります。たとえば、C# のコード:static void Main(string[] args) { if(true) { int number=10; } Console.WriteLine(number); }
if(true) { int number=10; Console.WriteLine(number); }
コードの実行時に変数番号が定義されていないため、関数内で定義された変数は関数内で任意に使用できます。 :
<script type="text/javascript"> var num=function() { var number=10; }; try{ alert(number); }catch(e) { alert(e); } </script>
このコードが実行されると、エラーは 2 回表示されます。つまり、未定義と 10
2. 子ドメインは親ドメインにアクセスしますこの関数は、変数のスコープを指定し、関数内の関数はスコープのサブドメインになります。 サブドメイン内のコードは、親ドメインの変数にアクセスできます。 コードは次のとおりです。
<script type="text/javascript"> var num=function(){ alert(number); var number=10; alert(number); }; try{ num(); }catch(e){ alert(e); } </script>
の実行結果。このコードは 10 ですが、サブドメイン内の親ドメインにアクセスするためのコードも条件付きです
<script type="text/javascript">
var func=function(){
var number=10;
var sub_func=function(){
alert(num);
};
sub_func();
};
func();
</script>
このコードは、前のコードよりも 1 つ多くの「var num=20;」を持っています。このコードによって出力される結果は 20 です。この時点で、サブドメインがアクセスする num は親ドメインではなく、サブドメイン内の変数です。 JavaScript で変数を使用する場合、JavaScript インタプリタはまず現在のスコープで変数の定義を検索します。そうでない場合は、この変数を使用します。親ドメインなど、トップレベルのスコープが見つからないまで、「変数が定義されていません」という例外がスローされます。コードは次のとおりです。
<script type="text/javascript"> var func=function(){ var number=10; var sub_func=function(){ var num=20; alert(num); }; sub_func(); }; func(); </script>
このコードが実行されると、 "
" を使用すると、20 が出力されます。未定義のエラーが発生します。 以下は、JS スコープとブロックレベルのスコープの紹介ですスコープは、変数とパラメーターの可視性とライフサイクルを制御するため、どのプログラミング言語でも常に最優先されます。そういえば、まずブロックレベルスコープと関数スコープという 2 つの概念を理解してください。var num=20
"取掉,那么打印的就是10.同样去掉"var num=10
中括弧 ({ と }) のペア内のステートメントのセットはブロックに属し、ブロック内で定義されているすべての変数はコード ブロックの外では見えません。これをブロック レベル スコープと呼びます。
関数のスコープがわかりやすい(*^__^*)関数内で定義されたパラメータや変数は関数の外からは見えません。
ほとんどの C 系言語にはブロックレベルのスコープがありますが、JS にはありません。以下のデモをご覧ください:
<script type="text/javascript"> (function (){ var num=10; (function (){ var num=20; (function(){ alert(num); })(); })(); })(); </script>
このコードを実行すると、「未定義の変数を使用します:j」というエラーが表示されます。ご覧のとおり、C 言語にはブロック レベルのスコープがあります。これは、 j が if ステートメント ブロック内で定義されているため、ブロックの外からはアクセスできないためです。
JS はどのように動作するのでしょうか? 別のデモを見てみましょう:
//C语言 #include <stdio.h> void main() { int i=2; i--; if(i) { int j=3; } printf("%d/n",j); }
那么我们该如何使JS拥有块级作用域呢?是否还记得,在一个函数中定义的变量,当这个函数调用完后,变量会被销毁,我们是否可以用这个特性来模拟出JS的块级作用域呢?看下面这个DEMO:
function test(){ (function (){ for(var i=0;i<4;i++){ } })(); alert(i); } test();
这时候再次运行,会弹出"i"未定义的错误,哈哈,实现了吧~~~这里,我们把for语句块放到了一个闭包之中,然后调用这个函数,当函数调用完毕,变量i自动销毁,因此,我们在块外便无法访问了。
JS的闭包特性is the most important feature((*^__^*) 大家懂的)。在JS中,为了防止命名冲突,我们应该尽量避免使用全局变量和全局函数。那么,该如何避免呢?不错,正如上文demo所示,我们可以把要定义的所有内容放入到一个
(function (){ //内容 })();
相关推荐:
以上がJavaScript のスコープとブロックレベルのスコープの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

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

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

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

ホットトピック









typedef struct は、構造体の使用を簡素化するために構造体型のエイリアスを作成するために C 言語で使用されます。構造体の別名を指定することで、新しいデータ型を既存の構造体に別名付けします。利点としては、可読性の向上、コードの再利用、型チェックなどが挙げられます。注: エイリアスを使用する前に構造体を定義する必要があります。エイリアスはプログラム内で一意であり、宣言されているスコープ内でのみ有効である必要があります。

Java における変数の期待値の例外は、変数の初期化、null 値の使用、およびローカル変数のスコープの認識によって解決できます。

JavaScript クロージャーの利点には、変数スコープの維持、モジュール化コードの有効化、遅延実行、およびイベント処理が含まれますが、欠点としては、メモリ リーク、複雑さの増加、パフォーマンスのオーバーヘッド、およびスコープ チェーンの影響が挙げられます。

C++ の #include プリプロセッサ ディレクティブは、外部ソース ファイルの内容を現在のソース ファイルに挿入し、その内容を現在のソース ファイル内の対応する場所にコピーします。主に、コード内で必要な宣言を含むヘッダー ファイルをインクルードするために使用されます。たとえば、標準入出力関数を組み込むための #include <iostream> などです。

C++ スマート ポインターのライフ サイクル: 作成: スマート ポインターは、メモリが割り当てられるときに作成されます。所有権の譲渡: 移動操作を通じて所有権を譲渡します。リリース: スマート ポインターがスコープ外に出るか、明示的に解放されると、メモリが解放されます。オブジェクトの破壊: ポイントされたオブジェクトが破壊されると、スマート ポインターは無効なポインターになります。

できる。 C++ では、ネストされた関数の定義と呼び出しが可能です。外部関数は組み込み関数を定義でき、内部関数はスコープ内で直接呼び出すことができます。ネストされた関数により、カプセル化、再利用性、スコープ制御が強化されます。ただし、内部関数は外部関数のローカル変数に直接アクセスすることはできず、戻り値の型は外部関数の宣言と一致している必要があります。内部関数は自己再帰的ではありません。

JavaScript では、this のポインティング タイプには、1. グローバル オブジェクト、2. 関数呼び出し、4. イベント ハンドラー、5. アロー関数 (this の外側の継承) が含まれます。さらに、bind()、call()、および apply() メソッドを使用して、これが何を指すかを明示的に設定できます。

Vue では、let と var の間で変数を宣言するときのスコープに違いがあります。 スコープ: var にはグローバル スコープがあり、let にはブロック レベルのスコープがあります。ブロックレベルのスコープ: var はブロックレベルのスコープを作成しません。let はブロックレベルのスコープを作成します。再宣言: var は同じスコープ内の変数の再宣言を許可しますが、let は許可しません。
