これは初心者によるjs講座です。(ChatGPTと会話して作りました)
目的
・JavaScriptにおける変数と宣言の基本を理解すること
・変数はプログラムでデータを扱うために欠かせないことを紹介する
まとめ(忙しい人向け)
・変数
とは、データを保存するための名前付きの箱
。
・変数を宣言するには、var / let / const
を使う。
・基本
は const
、値を変えたいときだけ let
を使う。
・var
は再宣言できてしまうため、バグのもと
になりやすいので基本使わない。
・変数にはスコープ
(使える範囲)があり、let
とconst
はブロック単位、varは関数単位で管理される。
そもそも変数とはなにか?
「変数」とはデータに名前をつけて保存する箱のようなもの。例を示すとすれば次の2つのたとえがわかりやすい。
1、箱のたとえ
プログラムはたくさんのデータ(数字や文字など)を扱う。しかし、ただデータを置いておくだけでは、どれがどれだかわからなくなってしまう。そこで「変数」という名前付きの箱を用意して、分類し、しまうことで簡単に管理したり取り出したりできるようになる。
2、メモ帳のたとえ
プログラムは、何かを記憶しておく必要がある。例えば、計算結果を覚えて置いたり、ユーザーの名前を保存したりする場面だ。そんなとき、メモ帳に名前をつけてメモしておくようにプログラムでは「変数」をつかって情報を一時的に保存する。
なぜ変数が必要か
前述の例でもしめしたように、データを再利用、または管理しやすくするためだ。
変数を宣言する方法
結論から言うと、var
、let
、const
の三つがあり、
・var
→歴史的に古く、注意点がある
・let
→現在主流の変数宣言方法
・const
→値を変更しない(定数)のための宣言方法
それぞれについて以下で解説する。
var
を使った宣言
例
var message = "こんにちは";
console.log(message); // 結果: こんにちは
var
は古くから使われてきた宣言方法ではある。しかし、後述するスコープ
の問題で現在はあまり使われていない。また同じ名前の変数を再定義できてしまうことからも忌避される
let
を使った宣言
例
let count = 5;
console.log(count); // 結果: 5
現在もっとも主流な宣言方法。あとから値を変更できるのが特徴。またvar
のスコープの問題
や同じ名前の変数を再定義できてしまう問題も解消さている。
const
を使った宣言
例
const pi = 3.14;
console.log(pi); // 結果: 3.14
const
は値を変更することができない変数を作るときに使う。一度値を代入すると基本的には変更できない。数値や文字列などのオブジェクト以外のデータを代入したときは定数になるが、オブジェクトそのものを宣言したときは違う。
例
// `const`でオブジェクトを定義している
const object = {
key: "値"
};
// オブジェクトそのものは変更できてしまう
object.key = "新しい値";
どの変数を使うべきか?
基本はまずはconst
で宣言して、「値を後から変えたい」ときだけlet
を使うのが無難。var
はなるべく使わないほうが安全。
なぜlet
やconst
は追加されたのか
const
やlet
を追加し、var
の動作を変更しなかったのは後方互換性のためである。すなわち、var
の動作を変更してしまうとすでにvar
で書かれたコードが動かなくなってしまうのを避けるためである。
変数名のルール
英数字、$、_ が使える。しかし、数字からはじめることや、予約語は使えない。意味のある名前をつけることも大切である。
意味のある名前を付けよう→「変数名だけで何を表しているか伝わるようにしよう」
悪い例
let a = 10;
let b = 20;
let c = a + b;
console.log(c);
なにを意味しているかわかりにくい。
良い例
let price = 10;
let tax = 20;
let totalPrice = price + tax;
console.log(totalPrice);
価格と税金を足して「合計金額」を出しているとすぐにわかる!
変数のスコープとは
結論からいうと、スコープとは変数がつかえる範囲のことである。var
とlet/const
のスコープは、それぞれ関数スコープ、ブロックスコープという違いがある。以下で詳しく解説する。
var
のスコープ(関数のスコープ)
var
で宣言した変数は関数の中だけで有効。関数外には影響しない。(関数外からはアクセスできない)
例
function greet() {
var message = "こんにちは";
console.log(message); // 結果: こんにちは
}
greet();
console.log(message); // エラー!messageは関数の外では使えない
let・const
のスコープ(ブロックスコープ)
letとconstで宣言した変数は、ブロック({}で囲まれた範囲)内だけで有効。
これはif文やfor文の中も同じである。
例1
{
let color = "blue";
console.log(color); // 結果: blue
}
console.log(color); // エラー!colorはブロックの外では使えない
例2
if (true) {
const number = 100;
console.log(number); // 結果: 100
}
console.log(number); // エラー!numberはifの中だけで使える
ポイント
基本はconst/let
を使う。変数の「生きている範囲」を意識し、無駄に広いスコープを持たせないようにする。var
は思わぬバグを生むのでできるだけ使わない。
まとめ(再掲)
・変数
とは、データを保存するための名前付きの箱
。
・変数を宣言するには、var / let / const
を使う。
・基本
は const
、値を変えたいときだけ let
を使う。
・var
は再宣言できてしまうため、バグのもと
になりやすいので基本使わない。
参考