<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>http://mochiuwiki.e2.valueserver.jp/index.php?action=history&amp;feed=atom&amp;title=JavaScript%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E5%A4%89%E6%95%B0%E5%AE%A3%E8%A8%80</id>
	<title>JavaScriptの基礎 - 変数宣言 - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="http://mochiuwiki.e2.valueserver.jp/index.php?action=history&amp;feed=atom&amp;title=JavaScript%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E5%A4%89%E6%95%B0%E5%AE%A3%E8%A8%80"/>
	<link rel="alternate" type="text/html" href="http://mochiuwiki.e2.valueserver.jp/index.php?title=JavaScript%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E5%A4%89%E6%95%B0%E5%AE%A3%E8%A8%80&amp;action=history"/>
	<updated>2026-04-26T10:39:20Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://mochiuwiki.e2.valueserver.jp/index.php?title=JavaScript%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E5%A4%89%E6%95%B0%E5%AE%A3%E8%A8%80&amp;diff=14330&amp;oldid=prev</id>
		<title>Wiki: ページの作成:「== 概要 == JavaScriptにおける変数宣言には、&lt;code&gt;var&lt;/code&gt;、&lt;code&gt;let&lt;/code&gt;、&lt;code&gt;const&lt;/code&gt; の3つのキーワードが存在する。&lt;br&gt; &lt;br&gt; &lt;code&gt;var&lt;/code&gt; はJavaScript誕生当初から存在するキーワードであり、関数スコープまたはグローバルスコープで変数を宣言する。&lt;br&gt; 一方、&lt;code&gt;let&lt;/code&gt; と &lt;code&gt;const&lt;/code&gt; は2015年に策定されたES2015 (ES6) で新たに導入されたキーワー…」</title>
		<link rel="alternate" type="text/html" href="http://mochiuwiki.e2.valueserver.jp/index.php?title=JavaScript%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E5%A4%89%E6%95%B0%E5%AE%A3%E8%A8%80&amp;diff=14330&amp;oldid=prev"/>
		<updated>2026-02-18T11:41:04Z</updated>

		<summary type="html">&lt;p&gt;ページの作成:「== 概要 == JavaScriptにおける変数宣言には、&amp;lt;code&amp;gt;var&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;const&amp;lt;/code&amp;gt; の3つのキーワードが存在する。&amp;lt;br&amp;gt; &amp;lt;br&amp;gt; &amp;lt;code&amp;gt;var&amp;lt;/code&amp;gt; はJavaScript誕生当初から存在するキーワードであり、関数スコープまたはグローバルスコープで変数を宣言する。&amp;lt;br&amp;gt; 一方、&amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt; と &amp;lt;code&amp;gt;const&amp;lt;/code&amp;gt; は2015年に策定されたES2015 (ES6) で新たに導入されたキーワー…」&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== 概要 ==&lt;br /&gt;
JavaScriptにおける変数宣言には、&amp;lt;code&amp;gt;var&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;const&amp;lt;/code&amp;gt; の3つのキーワードが存在する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;var&amp;lt;/code&amp;gt; はJavaScript誕生当初から存在するキーワードであり、関数スコープまたはグローバルスコープで変数を宣言する。&amp;lt;br&amp;gt;&lt;br /&gt;
一方、&amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt; と &amp;lt;code&amp;gt;const&amp;lt;/code&amp;gt; は2015年に策定されたES2015 (ES6) で新たに導入されたキーワードであり、ブロックスコープを持つ。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
これら3つのキーワードは、スコープ、ホイスティング (変数の巻き上げ)、再宣言・再代入の可否という3つの観点で大きく異なる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;var&amp;lt;/code&amp;gt; はブロックスコープを持たないため、ループや条件分岐の内部で宣言した変数が外部に漏れ出し、予期しない動作を引き起こす問題がある。&amp;lt;br&amp;gt;&lt;br /&gt;
また、宣言前のアクセスが &amp;lt;code&amp;gt;undefined&amp;lt;/code&amp;gt; を返すという挙動も、バグの温床となりやすい。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt; と &amp;lt;code&amp;gt;const&amp;lt;/code&amp;gt; はこれらの問題を解消するために設計されており、現代的なJavaScript開発ではこの2つを用いることが標準となっている。&amp;lt;br&amp;gt;&lt;br /&gt;
原則として &amp;lt;code&amp;gt;const&amp;lt;/code&amp;gt; をデフォルトの選択肢として使用し、再代入が必要な場面でのみ &amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt; を使用することが広く推奨されている。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;&amp;lt;code&amp;gt;var&amp;lt;/code&amp;gt; は新規開発では使用せず、既存のレガシーコードを読み解く時の知識として理解しておくことが求められる。&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== let ==&lt;br /&gt;
==== 基本的な使用方法 ====&lt;br /&gt;
&amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt; はブロックスコープを持ち、再代入可能な変数を宣言するキーワードである。&amp;lt;br&amp;gt;&lt;br /&gt;
初期値なしで宣言することも、宣言と同時に初期値を設定することも可能である。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 let name;&lt;br /&gt;
 let name = value;&lt;br /&gt;
 let name1 = value1, name2 = value2;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
使用例を以下に示す。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 let count = 0;&lt;br /&gt;
 count = 1;           // 再代入可能&lt;br /&gt;
 console.log(count);  // 1&lt;br /&gt;
 &lt;br /&gt;
 let message;&lt;br /&gt;
 message = &amp;quot;Hello, World!&amp;quot;;&lt;br /&gt;
 console.log(message);  // &amp;quot;Hello, World!&amp;quot;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== 再代入と再宣言 ====&lt;br /&gt;
&amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt; は再代入が可能であるが、同一スコープ内での再宣言は &amp;lt;u&amp;gt;SyntaxError&amp;lt;/u&amp;gt; となる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 let x = 1;&lt;br /&gt;
 x = 2;           // OK : 再代入は可能&lt;br /&gt;
 console.log(x);  // 2&lt;br /&gt;
 &lt;br /&gt;
 let x = 3;       // SyntaxError: Identifier &amp;#039;x&amp;#039; has already been declared&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
ただし、異なるブロックスコープでは同じ名前の変数を宣言できる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 const x = &amp;quot;outer&amp;quot;;&lt;br /&gt;
 {&lt;br /&gt;
    const x = &amp;quot;inner&amp;quot;; // OK : 別のブロックスコープ&lt;br /&gt;
    console.log(x);    // &amp;quot;inner&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 console.log(x);       // &amp;quot;outer&amp;quot;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== ブロックスコープ ====&lt;br /&gt;
&amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt; はブロックスコープを持つ。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;{}&amp;lt;/code&amp;gt; 等のブロック内で宣言した変数は、そのブロック外からアクセスできない。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 function letTest() {&lt;br /&gt;
    let x = 1;&lt;br /&gt;
    {&lt;br /&gt;
       let x = 2;       // 別のブロックスコープの変数&lt;br /&gt;
       console.log(x);  // 2&lt;br /&gt;
    }&lt;br /&gt;
    console.log(x);     // 1&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 for (let i = 0; i &amp;lt; 3; i++) {&lt;br /&gt;
    console.log(i);     // 0, 1, 2&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 console.log(i);        // ReferenceError: i is not defined&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
また、&amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt; はトップレベルで宣言してもグローバルオブジェクト (&amp;lt;code&amp;gt;globalThis&amp;lt;/code&amp;gt;) のプロパティにはならない。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 var globalVar = &amp;quot;var&amp;quot;;&lt;br /&gt;
 let globalLet = &amp;quot;let&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 console.log(globalThis.globalVar);  // &amp;quot;var&amp;quot;&lt;br /&gt;
 console.log(globalThis.globalLet);  // undefined&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== const ==&lt;br /&gt;
==== 基本的な使用方法 ====&lt;br /&gt;
&amp;lt;code&amp;gt;const&amp;lt;/code&amp;gt; はブロックスコープを持ち、再代入不可の定数を宣言するキーワードである。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;const&amp;lt;/code&amp;gt; は宣言と同時に必ず初期値を指定しなければならない。&amp;lt;br&amp;gt;&lt;br /&gt;
初期化を省略すると &amp;lt;u&amp;gt;SyntaxError&amp;lt;/u&amp;gt; となる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 const name = value;&lt;br /&gt;
 &lt;br /&gt;
 const PI = 3.14159;&lt;br /&gt;
 const MAX_SIZE = 100;&lt;br /&gt;
 const APP_NAME = &amp;quot;MyApp&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 const FOO;  // SyntaxError: Missing initializer in const declaration&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== 再代入の禁止 ====&lt;br /&gt;
&amp;lt;code&amp;gt;const&amp;lt;/code&amp;gt; で宣言した変数への再代入は &amp;lt;u&amp;gt;TypeError&amp;lt;/u&amp;gt; となる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 const PI = 3.14159;&lt;br /&gt;
 PI = 3.14;   // TypeError: Assignment to constant variable.&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
同一スコープ内での再宣言も &amp;lt;u&amp;gt;SyntaxError&amp;lt;/u&amp;gt; となる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 const y = 1;&lt;br /&gt;
 const y = 2;  // SyntaxError: Identifier &amp;#039;y&amp;#039; has already been declared&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== constとオブジェクト (参照の不変性) ====&lt;br /&gt;
&amp;lt;code&amp;gt;const&amp;lt;/code&amp;gt; が保証するのは変数への参照の不変性のみである。&amp;lt;br&amp;gt;&lt;br /&gt;
参照先のオブジェクトや配列の中身 (プロパティや要素) は変更できる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 const obj = {&lt;br /&gt;
    name: &amp;quot;Alice&amp;quot;,&lt;br /&gt;
    age: 30&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 obj.name = &amp;quot;Bob&amp;quot;;  // OK : プロパティの変更は可能&lt;br /&gt;
 obj.age  = 31;     // OK&lt;br /&gt;
 &lt;br /&gt;
 obj = { name: &amp;quot;Charlie&amp;quot; };  // TypeError - 再代入は不可&lt;br /&gt;
 &lt;br /&gt;
 const arr = [1, 2, 3];&lt;br /&gt;
 arr[0] = 99;       // OK : 要素の変更は可能&lt;br /&gt;
 arr.push(4);       // OK : メソッドの呼び出しは可能&lt;br /&gt;
 arr = [4, 5, 6];   // TypeError : 再代入は不可&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===== Object.freeze =====&lt;br /&gt;
オブジェクトの中身を変更させたくない場合は、&amp;lt;code&amp;gt;Object.freeze()&amp;lt;/code&amp;gt; を使用する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;Object.freeze()&amp;lt;/code&amp;gt; を適用すると、プロパティの追加・削除・変更がすべて禁止される。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
ただし、&amp;lt;code&amp;gt;Object.freeze()&amp;lt;/code&amp;gt; は浅いフリーズ (Shallow Freeze) であるため、ネストされたオブジェクトや配列は保護されない。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 const frozenObj = Object.freeze({&lt;br /&gt;
    name: &amp;quot;Alice&amp;quot;,&lt;br /&gt;
    age: 30&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
 frozenObj.name = &amp;quot;Bob&amp;quot;;       // 失敗 (strict mode では TypeError)&lt;br /&gt;
 frozenObj.newProp = &amp;quot;value&amp;quot;;  // 失敗 : プロパティの追加も不可&lt;br /&gt;
 console.log(frozenObj.name);  // &amp;quot;Alice&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 // 浅いフリーズの制限: ネストされたオブジェクトは変更可能&lt;br /&gt;
 const obj = Object.freeze({&lt;br /&gt;
    level1: {&lt;br /&gt;
       level2: &amp;quot;value&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
 });&lt;br /&gt;
 &lt;br /&gt;
 obj.level1.level2 = &amp;quot;newValue&amp;quot;;  // OK : ネストされたオブジェクトは保護されない&lt;br /&gt;
 console.log(obj.level1.level2);  // &amp;quot;newValue&amp;quot;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
ネストされたオブジェクトも含めて完全に不変にするには、再帰的にフリーズする深いフリーズ (Deep Freeze) を実装する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 function deepFreeze(object) {&lt;br /&gt;
    const propNames = Reflect.ownKeys(object);&lt;br /&gt;
 &lt;br /&gt;
    for (const name of propNames) {&lt;br /&gt;
       const value = object[name];&lt;br /&gt;
 &lt;br /&gt;
       if ((value &amp;amp;&amp;amp; typeof value === &amp;quot;object&amp;quot;) || typeof value === &amp;quot;function&amp;quot;) {&lt;br /&gt;
          deepFreeze(value);&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    return Object.freeze(object);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 const deepFrozenObj = deepFreeze({&lt;br /&gt;
    level1: {&lt;br /&gt;
       level2: &amp;quot;value&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
 });&lt;br /&gt;
 &lt;br /&gt;
 deepFrozenObj.level1.level2 = &amp;quot;newValue&amp;quot;; // 失敗&lt;br /&gt;
 console.log(deepFrozenObj.level1.level2);  // &amp;quot;value&amp;quot;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== ブロックスコープ ====&lt;br /&gt;
&amp;lt;code&amp;gt;const&amp;lt;/code&amp;gt; のスコープは、&amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt; と同様にブロックスコープである。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 const MY_FAV = 7;&lt;br /&gt;
 &lt;br /&gt;
 if (MY_FAV === 7) {&lt;br /&gt;
    const MY_FAV = 20; // 新しいブロックスコープ内の別の変数&lt;br /&gt;
    console.log(MY_FAV); // 20&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 console.log(MY_FAV); // 7&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== var ==&lt;br /&gt;
==== 基本的な使用方法 ====&lt;br /&gt;
&amp;lt;code&amp;gt;var&amp;lt;/code&amp;gt; は関数スコープまたはグローバルスコープで変数を宣言するキーワードである。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
ES2015以前から存在する古いキーワードであり、全てのWebブラウザで広くサポートされている。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 var name;&lt;br /&gt;
 var name = value;&lt;br /&gt;
 var name1 = value1, name2 = value2;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;var&amp;lt;/code&amp;gt; は同一スコープ内での再宣言が可能であり、エラーにはならない。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 var a = 1;&lt;br /&gt;
 var a = 2;       // エラーにならない&lt;br /&gt;
 console.log(a);  // 2&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== 関数スコープ ====&lt;br /&gt;
&amp;lt;code&amp;gt;var&amp;lt;/code&amp;gt; は関数スコープを持つ。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
ブロック (&amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; 等) は、&amp;lt;code&amp;gt;var&amp;lt;/code&amp;gt; のスコープを形成しない。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
ブロック内で宣言した &amp;lt;code&amp;gt;var&amp;lt;/code&amp;gt; 変数は、そのブロックの外からもアクセスできる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 function functionScope() {&lt;br /&gt;
    if (true) {&lt;br /&gt;
       var x = &amp;quot;inside&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    console.log(x); // &amp;quot;inside&amp;quot; - if ブロック外でもアクセス可能&lt;br /&gt;
 }&lt;br /&gt;
 functionScope();&lt;br /&gt;
 &lt;br /&gt;
 for (var i = 0; i &amp;lt; 3; i++) {&lt;br /&gt;
    console.log(i); // 0, 1, 2&lt;br /&gt;
 }&lt;br /&gt;
 console.log(i); // 3 - ループ外でもアクセス可能&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
また、トップレベルでの &amp;lt;code&amp;gt;var&amp;lt;/code&amp;gt; 宣言はグローバルオブジェクト (&amp;lt;code&amp;gt;globalThis&amp;lt;/code&amp;gt;) のプロパティとして追加される。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 var x = 1;&lt;br /&gt;
 console.log(globalThis.x);  // 1&lt;br /&gt;
 &lt;br /&gt;
 delete x;                   // 削除できない (strict modeでは、TypeError)&lt;br /&gt;
 console.log(globalThis.x);  // 1&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== varの問題点 ====&lt;br /&gt;
&amp;lt;code&amp;gt;var&amp;lt;/code&amp;gt; の使用はいくつかの問題を引き起こすため、現代的なJavaScript開発では使用が推奨されない。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
ループでのクロージャ問題を以下に示す。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;var&amp;lt;/code&amp;gt; はブロックスコープを持たないため、ループ内でクロージャを使用すると、全ての関数が同じ変数を参照してしまう。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 // 問題のあるコード (varを使用)&lt;br /&gt;
 var funcs = [];&lt;br /&gt;
 for (var i = 0; i &amp;lt; 3; i++) {&lt;br /&gt;
    funcs.push(function() {&lt;br /&gt;
       console.log(i);&lt;br /&gt;
    });&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 funcs[0]();  // 3 (期待値: 0)&lt;br /&gt;
 funcs[1]();  // 3 (期待値: 1)&lt;br /&gt;
 funcs[2]();  // 3 (期待値: 2)&lt;br /&gt;
 &lt;br /&gt;
 // 解決策: letを使用&lt;br /&gt;
 let funcs2 = [];&lt;br /&gt;
 for (let i = 0; i &amp;lt; 3; i++) {&lt;br /&gt;
    funcs2.push(function() {&lt;br /&gt;
       console.log(i);&lt;br /&gt;
    });&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 funcs2[0]();  // 0&lt;br /&gt;
 funcs2[1]();  // 1&lt;br /&gt;
 funcs2[2]();  // 2&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
変数の巻き上げによる予期しない動作を以下に示す。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;var&amp;lt;/code&amp;gt; はホイスティングにより &amp;lt;code&amp;gt;undefined&amp;lt;/code&amp;gt; で初期化されるため、宣言前にアクセスしてもエラーにならず、デバッグが困難になる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 function unexpected() {&lt;br /&gt;
    console.log(x); // undefined (エラーにならない)&lt;br /&gt;
    if (false) {&lt;br /&gt;
       var x = 5;   // このブロックは実行されないが、宣言は巻き上げられる&lt;br /&gt;
    }&lt;br /&gt;
    console.log(x); // undefined&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
グローバルオブジェクトへのプロパティ追加を以下に示す。&amp;lt;br&amp;gt;&lt;br /&gt;
トップレベルの &amp;lt;code&amp;gt;var&amp;lt;/code&amp;gt; 宣言はグローバルオブジェクトにプロパティとして追加されて、グローバル汚染を引き起こす可能性がある。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 var message = &amp;quot;global&amp;quot;;&lt;br /&gt;
 console.log(window.message);  // &amp;quot;global&amp;quot; : ブラウザ環境&lt;br /&gt;
 &lt;br /&gt;
 let safe = &amp;quot;no pollution&amp;quot;;&lt;br /&gt;
 console.log(window.safe);     // undefined&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== スコープの比較 ==&lt;br /&gt;
下表に、&amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;const&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;var&amp;lt;/code&amp;gt; のスコープの違いを示す。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ スコープ比較表&lt;br /&gt;
! キーワード !! スコープの種類 !! ブロック内での宣言 !! グローバルオブジェクトへの追加&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;var&amp;lt;/code&amp;gt; || 関数スコープ / グローバルスコープ || ブロック外からアクセス可能 || あり&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt; || ブロックスコープ || ブロック外からアクセス不可 || なし&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;const&amp;lt;/code&amp;gt; || ブロックスコープ || ブロック外からアクセス不可 || なし&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
スコープの挙動を示すコード例を以下に示す。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 // var: 関数スコープ&lt;br /&gt;
 function testVar() {&lt;br /&gt;
    if (true) {&lt;br /&gt;
       var x = &amp;quot;var&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    console.log(x); // &amp;quot;var&amp;quot;: アクセス可能&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // let: ブロックスコープ&lt;br /&gt;
 function testLet() {&lt;br /&gt;
    if (true) {&lt;br /&gt;
       let y = &amp;quot;let&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    console.log(y);  // ReferenceError: y is not defined&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // const: ブロックスコープ&lt;br /&gt;
 function testConst() {&lt;br /&gt;
    if (true) {&lt;br /&gt;
       const z = &amp;quot;const&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    console.log(z);  // ReferenceError: z is not defined&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ホイスティング ==&lt;br /&gt;
ホイスティング (変数の巻き上げ) とは、JavaScriptエンジンがプログラムの実行前に変数・関数・クラスの宣言を処理する仕組みのことである。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
変数の使用箇所よりも前に宣言が処理されるが、&amp;lt;code&amp;gt;var&amp;lt;/code&amp;gt; と &amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;const&amp;lt;/code&amp;gt; では挙動が大きく異なる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== varのホイスティング ====&lt;br /&gt;
&amp;lt;code&amp;gt;var&amp;lt;/code&amp;gt; の宣言は、関数またはグローバルスコープの先頭に巻き上げられ、自動的に &amp;lt;code&amp;gt;undefined&amp;lt;/code&amp;gt; で初期化される。&amp;lt;br&amp;gt;&lt;br /&gt;
そのため、宣言前に変数にアクセスしてもエラーにはならず、&amp;lt;code&amp;gt;undefined&amp;lt;/code&amp;gt; が返される。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 console.log(x);  // undefined (エラーではない)&lt;br /&gt;
 var x = 5;&lt;br /&gt;
 console.log(x);  // 5&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
上記のコードは、JavaScriptエンジンによって内部的に以下のように処理される。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 var x;           // ホイスティング: undefinedで初期化&lt;br /&gt;
 console.log(x);  // undefined&lt;br /&gt;
 x = 5;           // 代入&lt;br /&gt;
 console.log(x);  // 5&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== let / constのホイスティングとTDZ ====&lt;br /&gt;
&amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt; と &amp;lt;code&amp;gt;const&amp;lt;/code&amp;gt; も技術的にはホイストされるが、&amp;lt;code&amp;gt;undefined&amp;lt;/code&amp;gt; では初期化されない。&amp;lt;br&amp;gt;&lt;br /&gt;
代わりに、ブロックの開始から宣言文に到達するまでの間、Temporal Dead Zone (TDZ : 一時的デッドゾーン) と呼ばれる状態に置かれる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
TDZの期間中に変数にアクセスすると &amp;lt;u&amp;gt;ReferenceError&amp;lt;/u&amp;gt; が発生する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 // letのTDZ&lt;br /&gt;
 {&lt;br /&gt;
    console.log(x); // ReferenceError: Cannot access &amp;#039;x&amp;#039; before initialization&lt;br /&gt;
    let x = 5;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // constのTDZ&lt;br /&gt;
 {&lt;br /&gt;
    console.log(y); // ReferenceError: Cannot access &amp;#039;y&amp;#039; before initialization&lt;br /&gt;
    const y = 10;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // varとの比較&lt;br /&gt;
 {&lt;br /&gt;
    console.log(z); // undefined (エラーではない)&lt;br /&gt;
    var z = 15;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
TDZは、外側のスコープに同名の変数が存在する場合にも注意が必要である。&amp;lt;br&amp;gt;&lt;br /&gt;
内側のブロックで &amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;const&amp;lt;/code&amp;gt; を宣言すると、そのブロック全体がTDZの影響を受ける。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 function test() {&lt;br /&gt;
    var foo = 33;&lt;br /&gt;
    if (foo) {&lt;br /&gt;
       let foo = foo + 55; // ReferenceError&lt;br /&gt;
       // 右辺の foo は内側のブロックの TDZ 内にあるためアクセスできない&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
下表に、ホイスティングの挙動比較を示す。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ ホイスティング挙動比較表&lt;br /&gt;
! キーワード !! ホイスティング !! 初期値 !! 宣言前のアクセス&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;var&amp;lt;/code&amp;gt; || あり || undefined || &amp;lt;u&amp;gt;undefined&amp;lt;/u&amp;gt; を返す&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt; || あり (TDZ) || 初期化されない || &amp;lt;u&amp;gt;ReferenceError&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;const&amp;lt;/code&amp;gt; || あり (TDZ) || 初期化されない || &amp;lt;u&amp;gt;ReferenceError&amp;lt;/u&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== let / const / var の比較 ==&lt;br /&gt;
&amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;const&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;var&amp;lt;/code&amp;gt; の特性を総合的に比較した表を以下に示す。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ let / const / var の総合比較表&lt;br /&gt;
! 特性 !! &amp;lt;code&amp;gt;var&amp;lt;/code&amp;gt; !! &amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt; !! &amp;lt;code&amp;gt;const&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| スコープ || 関数 / グローバル || ブロック || ブロック&lt;br /&gt;
|-&lt;br /&gt;
| ホイスティング || あり (undefined で初期化) || あり (TDZ) || あり (TDZ)&lt;br /&gt;
|-&lt;br /&gt;
| 宣言前のアクセス || undefined を返す || ReferenceError || ReferenceError&lt;br /&gt;
|-&lt;br /&gt;
| 再代入 || 可能 || 可能 || 不可&lt;br /&gt;
|-&lt;br /&gt;
| 再宣言 || 可能 || 不可 || 不可&lt;br /&gt;
|-&lt;br /&gt;
| 初期化の省略 || 可能 || 可能 || 不可 (SyntaxError)&lt;br /&gt;
|-&lt;br /&gt;
| グローバルオブジェクトへの追加 || あり || なし || なし&lt;br /&gt;
|-&lt;br /&gt;
| 導入バージョン || ES1 (初期) || ES2015 (ES6) || ES2015 (ES6)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 推奨される使用方法 ==&lt;br /&gt;
&amp;lt;u&amp;gt;現代的なJavaScript開発では、以下の原則に従って変数宣言のキーワードを選択することが推奨される。&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;u&amp;gt;&amp;lt;code&amp;gt;const&amp;lt;/code&amp;gt; をデフォルトとして使用する。&amp;lt;/u&amp;gt;&lt;br /&gt;
*: 変数が再代入される可能性がない場合は常に &amp;lt;code&amp;gt;const&amp;lt;/code&amp;gt; を使用する。&lt;br /&gt;
*: これにより、意図しない再代入を防ぎ、コードの意図を明確に表現できる。&lt;br /&gt;
*: 多くのスタイルガイド (Airbnb、Google等) でも &amp;lt;code&amp;gt;const&amp;lt;/code&amp;gt; の優先使用が推奨されている。&lt;br /&gt;
*: &amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;u&amp;gt;再代入が必要な場合のみ、&amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt; を使用する&amp;lt;/u&amp;gt;&lt;br /&gt;
*: カウンタ変数、条件によって値が変わる変数等、再代入が必要な場合にのみ &amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt; を使用する。&lt;br /&gt;
*: &amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;u&amp;gt;&amp;lt;code&amp;gt;var&amp;lt;/code&amp;gt; は使用しない。&amp;lt;/u&amp;gt;&lt;br /&gt;
*: 新規開発では &amp;lt;code&amp;gt;var&amp;lt;/code&amp;gt; を使用しない。&lt;br /&gt;
*: レガシーコードや古い環境向けのコードを読む際の知識として理解しておく。&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
推奨される使用例を以下に示す。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 // const をデフォルトとして使用&lt;br /&gt;
 const PI = 3.14159;&lt;br /&gt;
 const API_URL = &amp;quot;https://api.example.com&amp;quot;;&lt;br /&gt;
 const config = {&lt;br /&gt;
    debug: true,&lt;br /&gt;
    timeout: 5000&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 // 再代入が必要な場面でletを使用&lt;br /&gt;
 let count = 0;&lt;br /&gt;
 while (count &amp;lt; 10) {&lt;br /&gt;
    count++;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 let result;&lt;br /&gt;
 if (someCondition) {&lt;br /&gt;
    result = &amp;quot;value1&amp;quot;;&lt;br /&gt;
 } else {&lt;br /&gt;
    result = &amp;quot;value2&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // ループのカウンタは let を使用&lt;br /&gt;
 for (let i = 0; i &amp;lt; arr.length; i++) {&lt;br /&gt;
    console.log(arr[i]);&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
ESLintを使用している場合、&amp;lt;u&amp;gt;no-var&amp;lt;/u&amp;gt; ルールで &amp;lt;code&amp;gt;var&amp;lt;/code&amp;gt; の使用を禁止し、&amp;lt;u&amp;gt;prefer-const&amp;lt;/u&amp;gt; ルールで &amp;lt;code&amp;gt;const&amp;lt;/code&amp;gt; の優先使用を自動的に検出することができる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 関連情報 ==&lt;br /&gt;
* [[JavaScriptの基礎 - プリミティブ型]]&lt;br /&gt;
*: 7つのプリミティブ型、typeof演算子、型の自動変換&lt;br /&gt;
* [[JavaScriptの基礎 - 数値と算術演算子]]&lt;br /&gt;
*: Number型の特性、算術演算子、Mathオブジェクト、BigInt&lt;br /&gt;
* [[JavaScriptの基礎 - 文字列]]&lt;br /&gt;
*: テンプレートリテラル、文字列メソッド、タグ付きテンプレートリテラル&lt;br /&gt;
* [[JavaScriptの基礎 - 比較演算子と論理演算子]]&lt;br /&gt;
*: ===/==の違い、短絡評価、Null合体演算子、オプショナルチェーン&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{#seo:&lt;br /&gt;
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki&lt;br /&gt;
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,電気回路,電子回路,基板,プリント基板&lt;br /&gt;
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux&lt;br /&gt;
|image=/resources/assets/MochiuLogo_Single_Blue.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
[[カテゴリ:Web]]&lt;/div&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
</feed>