JavaScript では、変数はスコープの違いに応じてローカル変数とグローバル変数に分けられます。直接定義された変数はグローバル変数であり、関数内で定義された変数はローカル変数のみです。関数内で有効です。
グローバル変数とローカル変数が同じ変数名を使用している場合、ローカル変数がグローバル変数を上書きします。
コード例:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>js中全局变量与局部变量</title> </head> <body> <script type="text/javascript"> var a = "全局变量"; function test1() { var a = "局部变量"; alert(a); } function test2() { alert(a); var a = "局部变量"; alert(a); } function test3() { alert(a); a = "局部变量"; alert(a); } </script> <input type="button" value="test1" onclick="test1()"/> <input type="button" value="test2" onclick="test2()"/> <input type="button" value="test3" onclick="test3()"/> </body> </html>
操作の結果は次のとおりです:
test1 をクリックしてローカル変数をポップアップ表示します。
test2 をクリックすると、未定義のポップアップが表示され、次にローカル変数がポップアップ表示されます
test3 をクリックしてグローバル変数をポップアップし、次にローカル変数
これは、var を使用する場合と使用しない場合の違いです。
var を使用する場合、プログラムは新しい変数を強制的に定義します。
var が使用されない場合、システムはまず変数が現在のコンテキストに存在するかどうかを検索し、存在しない場合にのみ新しい変数を再定義します。
test3では、aが使用する変数は全てグローバル変数であり、1回目はグローバル変数を直接出力し、2回目はグローバル変数に直接値を代入して使用します。
test1 と test2 の両方で、var を使用して関数内で同じ名前の新しい変数を定義すると、関数内の変数によってグローバル変数が上書きされます。したがって、test2 では、最初の出力 a は上書きされたローカル変数 a ですが、初期値が与えられていないため、結果 未定義 が表示されます。このように変数を使用することは実際には間違っており、避けるべきです。