ホームページ > ウェブフロントエンド > jsチュートリアル > JS変数のスコープを宣言するにはどうすればよいですか?関数内のスコープ例の詳細な説明

JS変数のスコープを宣言するにはどうすればよいですか?関数内のスコープ例の詳細な説明

伊谢尔伦
リリース: 2017-07-18 10:50:44
オリジナル
1241 人が閲覧しました

変数のスコープは変数の可視性を指しますが、ライフサイクル (生存期間) は別の観点から変数を調べます。

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<5;i++) { 
  } 
    { 
        int j=10; 
    } 
    int z = 20; 
    System.out.println(i); // i不可见,语法分析时报错,即编译不通过 
    System.out.println(j); // j不可见,语法分析时报错,即编译不通过 
    System.out.println(z); // z可见,输出20 
}
ログイン後にコピー

に次のコードを記述します。ただし、これが JS

for(var i=0;i<5;i++) { 
} 
var obj = {name:"Lily"}; 
for(var attr in obj) { 
} 
{ 
  var j=10; 
} 
alert(i);//输出4,没有块级作用域 
alert(attr); //输出name,没有块级作用域 
alert(j);//输出10,没有块级作用域
ログイン後にコピー

内にある場合は、変数の宣言中にグローバル スコープでの for ループの使用を避けてください。そうしないと、グローバル名前付けスコープの汚染が発生します。

もちろん、JS1.7 は変数を宣言するための let キーワードを提案しましたが、これは for ステートメントのスコープにのみ適用されます。

for(let i=0;i<5;i++) { 
   //todo 
} 
alert(i);//运行时报错,提示i未定义
ログイン後にコピー

js関数内の変数のスコープ例:

<html>
<head>
</head>
<body>
<script type="text/javascript">
var a = 5;
var c = 3;
function t(){
 var a = 6;
 var b = 10;
 document.write(a+&#39;-----&#39;+b);
 document.write(c);
}
t();
</script>
</body>
</html>
ログイン後にコピー

PHPとは異なり、js関数内で変数を呼び出したい場合、まず関数内から変数を検索します。たとえば、この例では、a は 6 に等しいですが、関数本体では c が見つからないため、関数本体の外側で検索され、見つからない場合は呼び出されます。エラーが報告されます。

以上がJS変数のスコープを宣言するにはどうすればよいですか?関数内のスコープ例の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート