変数のスコープは変数の可視性を指しますが、ライフサイクル (生存期間) は別の観点から変数を検査します。
JSの変数のスコープはグローバル変数とローカル変数に分かれており、関数内で定義されたものをローカル変数、関数外で定義されたものをグローバル変数と呼びます。 (「関数の外にあるものはグローバル変数と呼ばれます」は相対的なものです。ここで議論する前提は、var を使用して明示的に宣言された変数であるということです。関数内で var なしで定義された変数は、デフォルトでグローバル変数です。もちろん、var なしで変数を宣言することは嫌われます。 )。
var glob = 4;//グローバルを宣言します関数外の変数
function fun() {
var height = 20; // 関数内で var で宣言されたものはローカル変数です
Weight = 50; // 関数内で var なしで宣言されたものは関数はグローバル変数です
}
fun();
alert(weight);
JS にはブロックレベルのスコープはありません。中括弧 {}。 Javaにはあります。メインメソッドに次のコードを記述します
public static void main (String... args) {
for(int i=0;i }
{
int j=10; 🎜> int z = 20;
System.out.println(i); // i が表示されないため、構文解析でエラーが報告されます。つまり、コンパイルが失敗します。
System.out.println(j); / j が表示されない、構文解析 エラーが報告されます。つまり、コンパイルが成功しません。
コードをコピーします。
コードは次のとおりです。
}
alert( i);// 出力 4、ブロックレベルのスコープなし
alert(attr); 、ブロック レベルのスコープがありません
alert(j);//出力 10、ブロック レベルのスコープがありません
これは、同時に変数を宣言するために for ループを使用することを避けることも示しています。そうしないと、グローバル名前付けスコープの汚染が発生します。
もちろん、let キーワードは変数を宣言するために JS1.7 で提案されました (https://developer.mozilla.org/cn/New_in_JavaScript_1.7 を参照)。これは for ステートメントのスコープにのみ適用されます。
コードをコピー
コードは次のとおりです。
のように
追記: Firefox2 は JS1.7 を実装します