スコープは変数とパラメーターの可視性とライフサイクルを制御するため、どのプログラミング言語でも常に最優先事項です。 JavaScriptのスコープとブロックレベルのスコープを紹介しますので、必要な方は参考にしてください
1. ブロックレベルのスコープの説明
JavaScriptの変数スコープを学ぶ前に、明確にしておく必要があります。いくつかの点 ポイント:
a. JavaScript の変数スコープは、独自のスコープ チェーンに基づいています。
b. JavaScript にはブロックレベルのスコープがありません。
c. 関数内で宣言された変数は、関数全体で定義されます。
JavaScript の変数スコープは、C# のコードなど、一般的に使用される C 系言語とは異なります:
static void Main(string[] args) { if(true) { int number=10; } Console.WriteLine(number); }
「数値が現在のコンテキストに存在しない」ため、このコードはコンパイルできません。
なぜなら、ここでは変数のスコープは中括弧で制限され、ブロックレベルのスコープと呼ばれます。ブロックレベルのスコープでは、定義の先頭から括弧の終わりまで、すべての変数が同じ中括弧内で定義および使用されるため、使用できます。
しかし、JavaScriptにはブロックレベルのスコープという概念がありません。
2. JavaScript のスコープ
1. 関数限定の変数スコープ JavaScript では、関数内で定義された変数には関数内でアクセスできますが、関数外からはアクセスできません。コードの実行中に、変数番号が定義されていないため、関数内で定義された変数は、代入前であっても関数内で任意に使用できます。
この段落 コードの実行後、エラーはスローされず、未定義と 10 の 2 回ポップアップします2. 子ドメインが親ドメインにアクセスします
この関数は変数の範囲を制限できますの場合、関数内の関数はその役割を持ちます。ドメインのサブドメインでは、サブドメイン内のコードは親ドメインの変数にアクセスできます。コードは次のとおりです。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>
以下は、JS スコープとブロックレベルのスコープの紹介です
スコープは、変数とパラメーターの可視性とライフサイクルを制御するため、どのプログラミング言語でも常に最優先されます。そういえば、まずブロックレベルスコープと関数スコープという 2 つの概念を理解してください。 var num=20
"取掉,那么打印的就是10.同样去掉"var num=10
ブロックレベルのスコープとは何ですか?
中括弧 ({ と }) のペア内のステートメントのセットはブロックに属し、ブロック内で定義されているすべての変数はコード ブロックの外では見えません。これをブロック レベル スコープと呼びます。 関数のスコープがわかりやすい(*^__^*)関数内で定義されたパラメータや変数は関数の外からは見えません。ほとんどの C 系言語にはブロックレベルのスコープがありますが、JS にはありません。以下のデモをご覧ください:<script type="text/javascript">
var num=function(){
alert(number);
var number=10;
alert(number);
};
try{
num();
}catch(e){
alert(e);
}
</script>
<script type="text/javascript"> var func=function(){ var number=10; var sub_func=function(){ alert(num); }; sub_func(); }; func(); </script>
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 サイトの他の関連記事を参照してください。