初めての人はお金持ちまでの道のり:0日目をまず読んでみてください!よろしくお願いします★
今日からスピードアップです!よろしくお願いします!
JavaScript ローカル&グローバル変数など
5. ローカル変数&グローバル変数とスコープ
ローカル変数とは
ローカル変数は、関数の内部で宣言された変数のことです。この変数は、関数が実行されている間だけ存在し、関数の外からはアクセスできません。
※{ }の中にある変数がローカル変数
スコープとは
スコープは、変数や関数が「どこで使えるか」を決める範囲のことです。ローカル変数のスコープは、宣言された関数の内部だけに限定されます。→{ }内だけ
※スコープには、グローバルスコープ、ローカルスコープ、ブロックスコープがある
function greet() {
let message = "Hello!"; // ローカル変数
console.log(message); // "Hello!" が表示される
}
greet();
console.log(message); // エラーが発生する、なぜならmessageは関数の外から見えないから
※greet(); は正常に機能し、"Hello!" が表示されます。
※console.log(message); はエラーが発生します。message という変数は関数内でのみ使えるため、関数の外で console.log(message); を使おうとするとエラーが発生します。(messageという変数はgreet関数の中で宣言されています。したがって、messageは関数の外側では使えないのです。)
●なぜローカル変数が重要なのか?
・独立性:関数内で同じ名前の変数を他の関数と衝突させずに使える。
・メモリの効率化:関数が実行された後、ローカル変数は自動的にメモリから解放されるため、無駄なメモリ使用を防ぎます。
グローバル変数とは
グローバル変数は、関数の外側で宣言された変数のことで、プログラム全体でアクセスできるという特徴があります。どこからでも使用できるため便利ですが、スコープが広い分、誤って他のコードで上書きされるリスクがあります。
let globalVar = "I am global!"; // グローバル変数
function showGlobal() {
console.log(globalVar); // "I am global!" と表示される
}
showGlobal();
console.log(globalVar); // これも問題なくアクセスできる
※showGlobal(); は正常に機能し、"I am global!" が表示されます。
※console.log(globalVar); も正常に機能します。(関数の中でもconsole. logを使って確認が行われているため、この最後の行のconsole.log(globalVar);はいらない。確認をするならどちらか一方で十分)
●注意点:
グローバル変数は、どこからでもアクセス可能なため、コードが複雑になるとバグの原因になりやすいです。できるだけローカル変数を使って、スコープを限定する方が安全です。
6. 無名関数
無名関数(匿名関数)とは、名前がない関数のことです。無名関数は、主に関数を一時的に使いたい場合や、他の関数の引数として渡す際に利用されます。
let greet = function() {
console.log("こんにちは、無名関数です!");
};
greet(); // "こんにちは、無名関数です!" と表示される
※ふつうはfunction 〇〇()のように〇〇という関数の名前を付けるが、〇〇の部分がないものを無名関数と呼ぶ
無名関数の代わりにローカル変数のみを使ってコードを書き換える
function showMessage() {
let greet = "こんにちは、無名関数です!"; // ローカル変数
console.log(greet); // ローカル変数 greet を表示
}
showMessage(); // "こんにちは、無名関数です!" と表示される
無名関数の代わりにグローバル変数のみを使ってコードを書き換える
let greet = "こんにちは、無名関数です!"; // グローバル変数
function showMessage() {
console.log(greet); // グローバル変数 greet をそのまま表示
}
showMessage(); // "こんにちは、無名関数です!" と表示される
ここで重要なポイント:
- 無名関数: 無名関数は名前を持たない関数です。この関数は、名前付き関数と同じように使えますが、主に特定の変数に代入したり、コールバック関数として使うために使われます。(コールバック関数については、この枠の下にあります)
- 関数を変数に代入: この例では、
greetという変数に無名関数が代入されています。変数に関数を代入することで、変数を関数として使うことができます。後でgreet()と呼び出すことで、この関数を実行します。 - 関数を呼び出す:
greet()と書くことで、変数greetに代入された無名関数が実行されます。つまり、greet()は、function() { ... }の中の処理を行います。
コールバック関数(現時点で学ぶべき点だけをサラッと)
コールバック関数とは、他の関数に引数として渡され、後で実行される関数のことです。コールバック関数は、特定のタイミングや条件が満たされたときに実行されるように設定されます。
setTimeout(function() {
console.log("3秒後に表示される無名関数のメッセージ");
}, 3000);
このコードの流れ:
setTimeout:一定時間が経過した後に指定した関数を実行するための関数です。- コールバック関数:無名関数(
function() { ... })がコールバック関数としてsetTimeoutに渡され、3秒後に実行されます。(※1000ミリ秒 = 1秒 なので、3000は 3秒 に相当) - 処理:3秒後に
console.log("3秒後に表示される無名関数のメッセージ");が実行され、メッセージが表示されます。
●知るべきポイント:
・コールバック関数は、ある処理が終わった後に実行されるよう設定される。
・setTimeout のように、非同期処理(一定時間後に処理を実行するなど)でよく使われます。
7. アロー関数
アロー関数は、短く簡潔に関数を定義できる方法です。ES6(ECMAScript 2015)で導入され、特に無名関数を定義する際に使われることが多いです。
基本的な書き方:
let 関数名 = (引数1, 引数2, …) => {
関数の処理内容
};
引数(ひきすう)とは
関数を定義するときに、関数のカッコ内に書かれる名前が引数です。そして、関数を呼び出すときにその引数に対して具体的な値(実引数と呼ばれるもの)を渡します。
let greet = (name) => {
console.log(`こんにちは、${name}さん!`);
};
greet("太郎"); // "こんにちは、太郎さん!" と表示される
・name が関数の引数です。関数に渡された値を受け取る役割を持ちます。
・"太郎" は、関数 greet("太郎") を呼び出すときに渡される**実際の値(実引数)**です。
・"こんにちは、${name}さん!" は文字列テンプレートで、${name} の部分に引数 name が代入されて、結果として "こんにちは、太郎さん!" となります。
※このコードの解説は下の具体例にあります
※ちなみに(name)の( )は省略可
アロー関数は、無名関数を短く書ける記法として使われます。特に、コールバック関数や短い関数を定義するときに便利です。
具体例:
通常の無名関数→アロー関数
例1:
let greet = function() {
console.log("こんにちは、無名関数です!");
};
↓
let greet = () => {
console.log("こんにちは、アロー関数です!");
};
※functionがあると => は使えません。function()の()内の引数が1つだけの時は()を省略できます。引数が0、もしくは2つ以上の時は省略できません。今回は引数が0なので省略できません。
例2:
let add = function(a, b) {
return a + b;
};
console.log(add(2, 3)); // 5 と表示される
↓
let add = (a, b) => a + b;
console.log(add(2, 3)); // 5 と表示される
※let add = (a, b) => a + b; は、アロー関数の短縮形です。このコードでは、引数を受け取り、1行の処理で結果を返すときに省略して書けます。
※アロー関数における {} と return の省略が可能になるのは、 アロー関数の処理が1行で、その1行が返り値(return)を必要とする場合のみです。
例3:
let greet = function(name) {
console.log(`こんにちは、${name}さん!`);
};
greet("太郎"); // "こんにちは、太郎さん!" と表示される
↓
let greet = name => {
console.log(`こんにちは、${name}さん!`);
};
greet("太郎"); // "こんにちは、太郎さん!" と表示される
こんにちは、${name}さん! はテンプレートリテラルという形式の文字列です。テンプレートリテラルは、${} の中に変数を埋め込むことができる特殊な文字列です。
アロー関数の特徴:
・アロー関数は、無名関数を短く書ける記法で、コーディングを簡潔にできるツールです。
・特に、短い関数やコールバック関数に便利です。
まとめ
アロー関数で結果を返さない処理(returnを使わない処理)を行う場合(例えば console.log())、波括弧 {} は省略可能ですが、return は自動的に行われません。このような場合、関数は実行されますが、返り値(return)は undefined になります。
※アロー関数で結果を返さない処理=returnを使わない処理(具体的には、console.log() のように、値を返さずに何かを出力するだけの処理を指します。)
8. 関数の応用(複数の引数、デフォルト引数)
複数の引数(Multiple Arguments)
function multiply(a, b) {
return a * b; // a と b の掛け算の結果を返す
}
console.log(multiply(3, 4)); // 12 と表示される
この記事内のアロー関数でも複数の引数について扱っています。もう何度か出てきているので追加説明はありません。
デフォルト引数(Default Arguments)
function greet(name = "ゲスト") {
console.log(`こんにちは、${name}さん!`);
}
greet(); // "こんにちは、ゲストさん!" と表示される(引数がないのでデフォルト値が使われる)
greet("太郎"); // "こんにちは、太郎さん!" と表示される(引数があるのでそれが使われる)
●コードの解説:
・name = "ゲスト" という記述は、関数 greet に**引数が渡されなかった場合に使われる「デフォルトの値」**です。
・もし greet() を引数なしで呼び出した場合、関数は name にデフォルト値 "ゲスト" を自動的に割り当てます。
・もし greet("太郎") のように引数が渡された場合、その引数が優先され、デフォルト値は使われません。
もし if 文で書くとしたら?
function greet(name) {
if (name === undefined) {
name = "ゲスト"; // 引数が渡されなかった場合に "ゲスト" を代入
}
console.log(`こんにちは、${name}さん!`);
}
greet(); // "こんにちは、ゲストさん!"
greet("太郎"); // "こんにちは、太郎さん!"
function greet(name):
greet関数を定義しています。この関数は、1つの引数nameを受け取ります。この引数には、挨拶したい相手の名前が入る予定です。
if (name === undefined):
- 関数が実行されるときに、
nameに値が渡されなかった場合(undefinedになっている場合)、このif文が実行されます。 undefinedとは、引数が指定されなかったときや、変数に値が代入されていないときに使われる状態です。- つまり、引数がない場合は
nameの代わりに"ゲスト"が代入されます。
name = "ゲスト";:
nameがundefinedであれば、nameに"ゲスト"というデフォルトの名前を代入します。これにより、引数が指定されなかった場合でも適切なメッセージを表示できます。
console.log(こんにちは、${name}さん!);:
- テンプレートリテラル(バッククォート
`を使った書き方)を用いて、nameの値をメッセージに埋め込んで出力しています。 - これにより、
nameに"ゲスト"や"太郎"が入ったメッセージを表示することができます。
複数の引数とデフォルト引数の組み合わせ
複数の引数を使う場合、一部の引数にデフォルト値を設定することも可能です。
function calculatePrice(price, taxRate = 0.1) {
return price + (price * taxRate);
}
console.log(calculatePrice(100)); // 110 と表示される(デフォルトの税率 0.1 が使われる)
console.log(calculatePrice(100, 0.2)); // 120 と表示される(税率 0.2 が使われる)
function calculatePrice(price, taxRate = 0.1):
- この部分で、関数
calculatePriceを定義しています。 priceは商品の価格を受け取るパラメータです。taxRateは税率を受け取るパラメータで、デフォルト値として0.1(10%) が設定されています。- もし税率が渡されなかった場合、この
0.1が使われます。
return price + (price * taxRate);: // return 100 + ( 100 × 0.1or0.2 )
- ここで、商品の価格に税率を適用して、最終価格を計算しています。
price * taxRateで税額を計算し、それを元の価格に加算しています。- 計算結果が関数の返り値として返されます。
実行結果の解説:
calculatePrice(100)を実行すると、priceに100が渡されますが、taxRateは指定されていないため、デフォルトの税率0.1(10%)が使われます。計算は次のようになります:- 税額:
100 * 0.1 = 10 - 合計:
100 + 10 = 110 - その結果、110 が返り値として出力されます。
まとめ
・複数の引数を使うことで、関数は複数のデータを処理できるようになります。
・デフォルト引数を設定することで、引数が渡されなかった場合の初期値を指定できます。
・複数の引数とデフォルト引数を組み合わせることで、関数をより柔軟に扱うことができます。
前回よりも多いJavaScriptの組み込み関数や予約語
組み込み関数(前回より多い)
1. データ型に関する組み込み関数
JavaScriptには、データ型を操作するための組み込み関数があります。これらは特定のデータ型に対して便利な操作を行うものです。
String関連の関数:charAt(),concat(),includes(),indexOf(),slice(),split(),toLowerCase(),toUpperCase()
Number関連の関数:toFixed(),toPrecision(),parseInt(),parseFloat(),isNaN()
Array関連の関数:push(),pop(),shift(),unshift(),slice(),splice(),concat(),map(),filter(),reduce(),forEach()
2. 数学関連の組み込み関数 (Mathオブジェクト)
Mathオブジェクトには、数学的な計算を行う組み込み関数が多くあります。これらは、特定の数値操作を効率的に行うために提供されています。
Mathオブジェクトの関数:Math.random(): 0以上1未満のランダムな数値を返すMath.floor(): 小数点以下を切り捨てるMath.ceil(): 小数点以下を切り上げるMath.round(): 四捨五入するMath.max(): 引数の中で最大の数値を返すMath.min(): 引数の中で最小の数値を返すMath.sqrt(): 平方根を計算する
3. 日付関連の組み込み関数 (Dateオブジェクト)
Dateオブジェクトには、日時を扱うための組み込み関数が多くあります。これにより、日時の取得や操作が可能になります。
Dateオブジェクトの関数:new Date(): 現在の日付と時刻を取得getFullYear(): 年を取得getMonth(): 月を取得getDate(): 日付を取得getHours(): 時刻を取得getMinutes(): 分を取得
4. グローバル関数
グローバル関数は、どこでも呼び出すことができる汎用的な関数です。これらの関数は、特定のオブジェクトに属しておらず、常に利用可能です。
- グローバル関数の例:
alert(): メッセージをポップアップで表示するconsole.log(): コンソールにメッセージを表示するparseInt(): 文字列を整数に変換するparseFloat(): 文字列を浮動小数点数に変換するisNaN(): 引数が数値ではない場合にtrueを返すsetTimeout(): 指定時間後に関数を実行setInterval(): 一定間隔で関数を繰り返し実行する
5. オブジェクト操作の組み込み関数
JavaScriptには、オブジェクトを操作するための便利な組み込み関数もあります。
- オブジェクト関連の関数:
Object.keys(): オブジェクトのキーの一覧を取得するObject.values(): オブジェクトの値の一覧を取得するObject.entries(): キーと値のペアを配列として取得するObject.assign(): オブジェクトを他のオブジェクトにコピーするObject.freeze(): オブジェクトを凍結し変更不可にする
6. JSONに関する組み込み関数
JavaScriptには、JSON(JavaScript Object Notation)を操作するための組み込み関数も用意されています。
- JSON関連の関数:
JSON.stringify(): オブジェクトをJSON形式の文字列に変換するJSON.parse(): JSON形式の文字列をJavaScriptのオブジェクトに変換する
7. エラーハンドリングに関する関数
JavaScriptでは、エラーハンドリングに関連する組み込み関数や構文も提供されています。
try-catch文:エラーハンドリングのための構文。throw:ユーザー定義のエラーを発生させるtry,catch,finally:エラーハンドリングを行う
組み込み関数の総数
JavaScriptの組み込み関数の総数は正確には特定の状況や環境によって異なることがありますが、数十種類以上あります。特に、ブラウザやNode.jsなどの実行環境によって、追加される機能や関数もあるため、その環境に依存することもあります。
予約語(前回より多い)
制御構文や条件分岐に関連する予約語
if:条件が真であればブロックを実行else:ifの条件が偽であればブロックを実行switch:複数の値を比較して分岐case:switch内で値を指定default:switch内で他のcaseに一致しない場合の処理for:ループを実行while:条件が真の間ループを実行do:whileと一緒に使い、条件にかかわらず少なくとも1度は実行break:ループやswitchから抜けるcontinue:ループの次の反復にスキップreturn:関数から値を返すtry:例外が発生する可能性のあるコードを実行catch:tryで発生したエラーをキャッチfinally:エラーの有無にかかわらず実行されるコードブロック
変数・定数の宣言に関する予約語
var:変数を宣言(古い方法)let:ブロックスコープの変数を宣言const:定数を宣言
関数・クラスに関する予約語
function:関数を定義class:クラスを定義extends:クラスを継承constructor:クラスのコンストラクタメソッドsuper:親クラスのコンストラクタやメソッドを呼び出すnew:オブジェクトを生成
オブジェクトやプロパティに関する予約語
this:現在のオブジェクトを参照delete:オブジェクトのプロパティを削除in:オブジェクト内にプロパティが存在するか確認instanceof:オブジェクトが特定のクラスのインスタンスか確認typeof:変数や式のデータ型を返すvoid:式の値を無視
その他の予約語
null:値が存在しないことを示すundefined:定義されていない変数の状態true:ブール値の真false:ブール値の偽import:モジュールをインポートするexport:モジュールをエクスポートするawait:非同期処理が完了するのを待つasync:非同期関数を定義yield:ジェネレータ関数内で値を一時停止・再開with:オブジェクトのスコープを拡張(非推奨)
将来の予約語
以下のキーワードは、将来のJavaScriptのバージョンで予約語として使用される可能性があります。
enumimplementsinterfacepackageprivateprotectedpublicstatic
たくさんありますが、とりあえずサラッと目を通して「初めまして!」とあいさつするくらいでOKです。
本日の感想
まだまだ序盤のはずなのに情報量が多くてパンクしそうです。そのことをChatGPTに相談したら、「あなたの目標である収入を得ながら自由に生活するためには、プログラミングを実用的に使うスキルが重要です。つまり、全てを暗記するよりも、効率的に学び、ツールを使っていく力をつけることが優先されます。そのため、学んだことの応用力を高め、問題が起きた時にどう対処するかに注力すると良いでしょう。また、コードを完全に暗記しなくても、基礎を理解し、検索能力やツールを使うスキルがあれば、問題なく目標に向かって進めると考えます。」とアドバイスをしてくれました。勉強も教えてくれるしアドバイスもしてくれるしで至れり尽くせりです。これからもよろしくGPT先生。
6~8日目の記事はこちら
JavaScript 関数の基礎,returnなど 6,7,8日目 2024/10/12~14(お金持ちまでの道のり)
10日目の記事はこちら
JavaScript オブジェクト/配列/イベント処理/forEach 10日目 2024/10/16(お金持ちまでの道のり)
ここに初めて来た人はゼヒ0日目を読んでください。プログラミング知識0のおじさんがお金持ちになるまでのプランと熱い思いが載っています。私と一緒に運要素を排除したゴリゴリの脳筋プレイでお金持ちを目指しませんか?
0日目の記事はこちら
お金持ちまでの道のり:0日目

コメント