JavaScript でローカル変数とグローバル変数を使用する方法とその違いは何ですか?

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

JavaScriptにはローカル変数とグローバル変数の2種類の変数があります。

まず第一に、ローカル変数は、この変数が宣言されている関数内でのみ呼び出すことができます。グローバル変数は、コード全体で呼び出すことができる変数です。もちろん、それを文字通りに理解するのは決して明確ではありません。以下に詳しく紹介します。
変数は var キーワードで宣言する必要があることは誰もが知っています。ただし、変数は JavaScript で暗黙的に使用することもできます。つまり、変数を宣言せずに直接使用することもできます。さらに、JavaScript は常に暗黙的に宣言された変数をグローバル変数として使用することに注意してください。
例:

function myName() {
 i = 'yuanjianhang';
}
myName();
function sayName() {
 alert(i);
}
sayName();
ログイン後にコピー
ログイン後にコピー

出力結果は次のとおりです:yuanjianhang

上記のコードを次のように変更すると、変数 i がグローバル変数であることがわかります:

function myName() {
 var i='yuanjianhang';
}
myName();
function sayName() {
 alert(i);
}
sayName();
ログイン後にコピー

この時点では、ブラウザーには何も出力されません。これは関数 myName で定義されているため、myName のローカル変数にすぎず、外部から呼び出すことはできません。


ここで次のコードを見てください:

function myName() {
 i = 'yuanjianhang';
}
myName();
function sayName() {
 alert(i);
}
sayName();
ログイン後にコピー
ログイン後にコピー

次に、いくつかの変更を加えて myName(); を削除しましょう。コードは次のとおりです:

function myName() {
 i = 'yuanjianhang';
}
function sayName() {
 alert(i);
}
sayName();
ログイン後にコピー

この時点では、ブラウザは応答しません。 i はグローバル変数ですが、関数 myName() は呼び出されていないため、i を宣言しても i に値を代入しないことと同等であるため、出力はありません。
同様に、上記の例を次のように変更すると、

function myName() {
 
 i = 'yuanjianhang';
}
function sayName() {
 alert(i);
}
sayName();
myName();
ログイン後にコピー

この場合、JavaScript コードは上から下に実行され、sayName() 関数が呼び出されるときに、変数 i がチェックされます。この時点では、関数 myName は実行されていないため、i には値が割り当てられていないため、結果は出力されません。

JavaScript のスコープを分割する基準は、if、while、for ではなく、function 関数ブロックです。

<script>
function f1(){
   alert("before for scope:"+i);   
 //i未赋值(并不是没有声明!使用未声明变量或函数会导致致命错误从而中断脚本执行)
 //此时i值为undefined
   for(var i=0; i<3;i++){
       alert("in for scope:"+i);}
 //i的值是0,1,2 
   alert(“after for scope:”+1);
  //i的值是3,此时已经在for scope之外,但i的值仍然保留为3
    while(true){
       var j=1;
       break;}
    alert(j);
  //j的值是1,此时已经在while scope之外,但j的值仍然保留为1
    if(true){
      var k=1;
    }
    alert(k);
  //k的值为1,此时已经在if scope之外,但k的值仍保留为1
}
f1();
//此时在函数块外调用函数,再次输出存在于f1这个function scope里的i j k变量
alert(i);
//error!!!原因是这里的i未声明(不是未赋值,区别f1的第一行输出),脚本错误,程序结束!
alert(j);   
//未执行
alert(k);
//未执行
</script>
ログイン後にコピー

JavaScript は実行前にスクリプト ファイル全体をプリコンパイルします (ローカル変数部分を含むスクリプト ファイルの宣言部分を分析します)。実変数のスコープを決定します。たとえば、以下のようになります。

<script>
   var x=1;
   function f2(){
    alert(x);
   //x的值为undefined!这个x并不是全局变量,因为在function scope已经又声明了一个重名的局部变量,所以全局变量的参数a被覆盖了。
    说明了JavaScript在执行前会进行预编译,函数体内的x就被指向局部变量,而不是全局变量。此时x只有声明,没有赋值,所以为undefined
    x=3;
    alert(x);
   //x值为3.但还是局部变量
    var x;
   //局部变量x在这里声明
    alert(x);
   //值为3
   }
   f2();
   alert(x);
   //x值为1,并不是在function scope内,x的值为全局变量的值。
</script>
ログイン後にコピー

グローバル変数がローカル変数と同じ名前の場合、ローカル変数のスコープがグローバル変数のスコープを上書きします。ローカル変数のスコープを抜けた後、元の変数に戻ります。グローバル変数のスコープwindow.globalVariableName を使用します。

りー

以上がJavaScript でローカル変数とグローバル変数を使用する方法とその違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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