JavaScriptのスコープ

JavaScript のスコープ

JavaScript では、オブジェクトと関数も変数です。

JavaScript では、スコープはアクセス可能な変数、オブジェクト、関数のコレクションです。

JavaScript 関数のスコープ: スコープは関数内で変更されます。


JavaScriptでは、varで宣言された変数には実際にスコープがあります。

変数が関数本体内で宣言されている場合、変数のスコープは関数本体全体であり、関数本体の外から変数を参照することはできません:

'use strict';function foo() {
var x = 1;
x = x + 1;
}

x = x + 2; // ReferenceError! 変数 x は関数本体の外で参照できません

2 つの異なる関数が同じ変数を宣言している場合、その変数ははそれぞれの関数本体内にのみあります。つまり、異なる関数内の同じ名前の変数は互いに独立しており、相互に影響しません。

'use strict';function foo() {
var x = 1;
x = x + 1;
}function bar() {
var x = 'A';
x = x + 'B';
}

JavaScript ローカル スコープ

変数は関数内で宣言され、変数はローカル スコープになります。

ローカル変数: 関数内でのみアクセスできます。

// carName 変数はここでは呼び出すことができません

function myFunction() {
var carName = "Volvo";
// carName 変数は関数内で呼び出すことができます
}

注:

ローカル変数は関数内でのみ機能するため、異なる関数で同じ名前の変数を使用できます。

ローカル変数は関数の実行開始時に作成され、関数の実行後に自動的に破棄されます。

グローバルスコープ

関数内で定義されていない変数はグローバル スコープを持ちます。実際、JavaScript にはデフォルトでグローバル オブジェクト ウィンドウがあり、グローバル スコープ内の変数は実際にはウィンドウのプロパティにバインドされています:

'use strict';

var course = 'Learn JavaScript';

alert(course); // 'Learn JavaScript'

alert(window.course); // 'Learn JavaScript'

したがって、グローバル変数 course に直接アクセスすることは、window.course にアクセスすることとまったく同じです。 。

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>php中文网(php.cn)</title> 
</head>
<body>
<p>全局变量在任何脚本和函数内均可访问。</p>
<p id="demo"></p>
<script>
var carName = "Volvo";
myFunction();
function myFunction() 
{
    document.getElementById("demo").innerHTML =
"这里是 " + carName;
}
</script>
</body>
</html>

JavaScript変数のライフサイクル

JavaScript変数のライフサイクルは宣言時に初期化されます。

ローカル変数は関数の実行後に破棄されます。

グローバル変数はページが閉じられると破棄されます。

関数パラメータ

関数パラメータは関数内でのみ機能し、ローカル変数です。


学び続ける
||
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> <script type="text/javascript"> var a =1; function test(){ alert(a); //a为undefined! 这个a并不是全局变量,这是因为在function scope里已经声明了(函数体倒数第4行)一个重名的局部变量, //所以全局变量a被覆盖了,这说明了Javascript在执行前会对整个脚本文件的定义部分做完整分析,所以在函数test()执行前, //函数体中的变量a就被指向内部的局部变量.而不是指向外部的全局变量. 但这时a只有声明,还没赋值,所以输出undefined。 a=4 alert(a); //a为4,没悬念了吧? 这里的a还是局部变量哦! var a; //局部变量a在这行声明 alert(a); //a还是为4,这是因为之前已把4赋给a了 } test(); alert(a); //a为1,这里并不在function scope内,a的值为全局变量的值 </script> </head> <body> </body> </html>
  • おすすめコース
  • コースウェアのダウンロード
現時点ではコースウェアはダウンロードできません。現在スタッフが整理中です。今後もこのコースにもっと注目してください〜