JavaScriptスコープ
スコープは、変数のアクセス可能性(可視性)を決定します。
JavaScriptには3種類のスコープがあります。
- ブロックスコープ
- 機能範囲
- グローバルスコープ
ブロックスコープ
ES6(2015)より前は、JavaScriptにはグローバルスコープと関数スコープしかありませんでした。
ES6では、2つの重要な新しいJavaScriptキーワードlet
とが導入されましconst
た。
これらの2つのキーワードは、JavaScriptでブロックスコープを提供します。
{}ブロック内で宣言された変数には、ブロック外からアクセスできません。
例
{
let x = 2;
}
// x can NOT be used here
キーワードで宣言された変数は、var
ブロックスコープを持つことはできません。
{}ブロック内で宣言された変数には、ブロック外からアクセスできます。
例
{
var x = 2;
}
// x CAN be used here
ローカルスコープ
JavaScript関数内で宣言された変数は、関数に対して LOCALになります。
例
// code here can NOT use carName
function myFunction() {
let carName = "Volvo";
// code here CAN use carName
}
// code here can NOT use carName
ローカル変数には関数スコープがあります:
これらは、関数内からのみアクセスできます。
ローカル変数は関数内でのみ認識されるため、同じ名前の変数を異なる関数で使用できます。
ローカル変数は、関数の開始時に作成され、関数の完了時に削除されます。
機能範囲
JavaScriptには関数スコープがあります:各関数は新しいスコープを作成します。
関数内で定義された変数は、関数外からアクセス(表示)できません。
で宣言された変数はvar
、関数内で宣言された場合let
とconst
非常によく似ています。
それらはすべて関数スコープを持っています:
function myFunction() {
var carName = "Volvo";
// Function Scope
}
function myFunction() {
let carName = "Volvo"; //
Function Scope
}
function myFunction() {
const carName = "Volvo"; //
Function Scope
}
グローバルJavaScript変数
関数の外部で宣言された変数は、GLOBALになります。
例
let carName = "Volvo";
// code here can use carName
function myFunction() {
// code here can also use carName
}
グローバル変数にはグローバルスコープがあります:
Webページ上のすべてのスクリプトと関数がアクセスできます。
グローバルスコープ
グローバルに(関数の外で) 宣言された変数には、グローバルスコープがあります。
グローバル変数には、JavaScriptプログラムのどこからでもアクセスできます。
で宣言された変数はvar
、ブロックの外で宣言された場合let
とconst
非常によく似ています。
それらはすべてグローバルスコープを持っています:
var x = 2;
// Global scope
let x = 2; //
Global scope
const x = 2; //
Global scope
JavaScript変数
JavaScriptでは、オブジェクトと関数も変数です。
スコープは、コードのさまざまな部分からの変数、オブジェクト、および関数のアクセシビリティを決定します。
自動的にグローバル
宣言されていない変数に値を割り当てると、その値は自動的にGLOBAL変数になります。
carName
このコード例では、値が関数内で割り当てられている場合でも、グローバル変数を宣言します。
例
myFunction();
// code here can use carName
function myFunction() {
carName = "Volvo";
}
厳密モード
最新のブラウザはすべて、「厳密モード」でのJavaScriptの実行をサポートしています。
厳密モードの使用方法については、このチュートリアルの後の章で詳しく説明します。
「厳密モード」では、宣言されていない変数は自動的にグローバルになりません。
HTMLのグローバル変数
JavaScriptの場合、グローバルスコープはJavaScript環境です。
HTMLでは、グローバルスコープはウィンドウオブジェクトです。
キーワードで定義されたグローバル変数はvar
、ウィンドウオブジェクトに属します。
例
var carName = "Volvo";
// code here
can use window.carName
キーワードで定義されたグローバル変数はlet
、ウィンドウオブジェクトに属していません。
例
let carName = "Volvo";
// code here can not use window.carName
警告
意図しない限り、グローバル変数を作成しないでください。
グローバル変数(または関数)は、ウィンドウ変数(または関数)を上書きできます。
ウィンドウオブジェクトを含むすべての関数は、グローバル変数と関数を上書きできます。
JavaScript変数の有効期間
JavaScript変数の有効期間は、宣言されたときに始まります。
関数(ローカル)変数は、関数が完了すると削除されます。
Webブラウザーでは、ブラウザーのウィンドウ(またはタブ)を閉じると、グローバル変数が削除されます。
関数の引数
関数の引数(パラメーター)は、関数内のローカル変数として機能します。