上級
STAGE 1
110問目 • 10
  • Q1

    Promiseとは何ですか?

    ANSWER
    非同期処理の結果を表すオブジェクト
    クリックして解説を表示
    EXPLANATION

    Promiseは「非同期処理の結果を表すオブジェクト」です。処理が成功(fulfilled)か失敗(rejected)かの状態を持ち、結果を後から取得できます。

  • Q2

    Promiseの3つの状態は何ですか?

    ANSWER
    pending, fulfilled, rejected
    クリックして解説を表示
    EXPLANATION

    Promiseはpending(待機中)、fulfilled(成功)、rejected(失敗)の3つの状態を持ちます。一度settled(fulfilledまたはrejected)になると状態は変わりません。

  • Q3

    Promiseを作成する正しい書き方はどれですか?

    ANSWER
    new Promise((resolve, reject) => { })
    クリックして解説を表示
    EXPLANATION

    Promiseはnew Promise((resolve, reject) => { })の形で作成します。resolveで成功、rejectで失敗を通知します。

  • Q4

    then()メソッドは何をしますか?

    ANSWER
    成功時のコールバックを登録する
    クリックして解説を表示
    EXPLANATION

    then()はPromiseが成功(fulfilled)したときに実行するコールバック関数を登録します。また、新しいPromiseを返すのでチェーンできます。

  • Q5

    次のコードを実行すると何が表示されますか?

    Promise.resolve(42)
      .then(value => console.log(value));
    ANSWER
    42
    クリックして解説を表示
    EXPLANATION

    Promise.resolve(42)は値42で即座に成功するPromiseを作成します。then()でその値を受け取り、42が表示されます。

  • Q6

    catch()メソッドは何をしますか?

    ANSWER
    失敗時のコールバックを登録する
    クリックして解説を表示
    EXPLANATION

    catch()はPromiseが失敗(rejected)したときに実行するコールバック関数を登録します。エラーハンドリングに使います。

  • Q7

    次のコードを実行すると何が表示されますか?

    Promise.reject(new Error("失敗"))
      .catch(e => console.log("エラー捕捉"));
    ANSWER
    エラー捕捉
    クリックして解説を表示
    EXPLANATION

    Promise.reject()は失敗するPromiseを作成します。catch()でエラーを捕捉し、「エラー捕捉」が表示されます。

  • Q8

    finally()メソッドは何をしますか?

    ANSWER
    成功・失敗に関わらず必ず実行される
    クリックして解説を表示
    EXPLANATION

    finally()はPromiseの成功・失敗に関わらず必ず実行されるコールバックを登録します。クリーンアップ処理などに使います。

  • Q9

    Promise.all()は何をしますか?

    ANSWER
    すべてのPromiseが成功したら結果の配列を返す
    クリックして解説を表示
    EXPLANATION

    Promise.all()は複数のPromiseを並列実行し、すべてが成功したら結果の配列を返します。1つでも失敗すると即座に失敗します。

  • Q10

    次のコードを実行すると何が表示されますか?

    Promise.all([
      Promise.resolve(1),
      Promise.resolve(2),
      Promise.resolve(3)
    ]).then(values => console.log(values));
    ANSWER
    [1, 2, 3]
    クリックして解説を表示
    EXPLANATION

    Promise.all()はすべてのPromiseの結果を配列として返します。結果は[1, 2, 3]です。

STAGE 2
1120問目 • 10
  • Q11

    Promise.all()で1つのPromiseが失敗するとどうなりますか?

    ANSWER
    即座に失敗する
    クリックして解説を表示
    EXPLANATION

    Promise.all()は1つでもPromiseが失敗すると、他の結果を待たずに即座に失敗(reject)します。

  • Q12

    Promise.race()は何をしますか?

    ANSWER
    最初に完了したPromiseの結果を返す
    クリックして解説を表示
    EXPLANATION

    Promise.race()は複数のPromiseのうち、最初に完了した(成功または失敗した)Promiseの結果を返します。

  • Q13

    Promise.allSettled()は何を返しますか?

    ANSWER
    各Promiseの状態と値を含むオブジェクトの配列
    クリックして解説を表示
    EXPLANATION

    Promise.allSettled()はすべてのPromiseが完了するまで待ち、各Promiseの成功/失敗の状態と値を含むオブジェクトの配列を返します。

  • Q14

    Promiseチェーンとは何ですか?

    ANSWER
    thenを連続して繋げて順番に処理すること
    クリックして解説を表示
    EXPLANATION

    Promiseチェーンはthen()を連続して繋げることで、非同期処理を順番に実行する方法です。前の処理の結果を次の処理に渡せます。

  • Q15

    次のコードを実行すると何が表示されますか?

    Promise.resolve(1)
      .then(x => x + 1)
      .then(x => x * 2)
      .then(x => console.log(x));
    ANSWER
    4
    クリックして解説を表示
    EXPLANATION

    Promiseチェーンで値が変換されていきます。1 → 2(+1)→ 4(*2)で、結果は4です。

  • Q16

    asyncキーワードは何をしますか?

    ANSWER
    関数が必ずPromiseを返すようにする
    クリックして解説を表示
    EXPLANATION

    asyncを関数の前に付けると、その関数は必ずPromiseを返すようになります。awaitを使えるようになります。

  • Q17

    awaitキーワードは何をしますか?

    ANSWER
    Promiseの完了を待って結果を取得する
    クリックして解説を表示
    EXPLANATION

    awaitはPromiseの完了を待ち、その結果を取得します。async関数の中でのみ使用できます。

  • Q18

    次のコードを実行すると何が表示されますか?

    async function test() {
      const result = await Promise.resolve(10);
      return result * 2;
    }
    test().then(v => console.log(v));
    ANSWER
    20
    クリックして解説を表示
    EXPLANATION

    awaitでPromiseの結果10を取得し、2倍して返します。async関数の戻り値はPromiseにラップされるので、then()で20を受け取ります。

  • Q19

    async/awaitでエラーをハンドリングするにはどうしますか?

    ANSWER
    try-catch文を使う
    クリックして解説を表示
    EXPLANATION

    async/awaitではtry-catch文を使ってエラーをハンドリングします。awaitした処理が失敗するとcatchブロックに入ります。

  • Q20

    次のコードを実行すると何が表示されますか?

    async function test() {
      try {
        await Promise.reject(new Error("失敗"));
        console.log("A");
      } catch (e) {
        console.log("B");
      }
    }
    test();
    ANSWER
    B
    クリックして解説を表示
    EXPLANATION

    awaitしたPromiseが失敗すると例外が投げられ、catchブロックに入ります。「B」が表示されます。

STAGE 3
2130問目 • 10
  • Q21

    awaitを使わずに複数の非同期処理を並列実行するにはどうしますか?

    ANSWER
    Promise.all()と組み合わせる
    クリックして解説を表示
    EXPLANATION

    Promise.all()と組み合わせることで、複数の非同期処理を並列実行し、すべての完了を待てます。

  • Q22

    次のコードを実行すると、処理にかかる時間は約何秒ですか?

    async function test() {
      const [a, b] = await Promise.all([
        new Promise(r => setTimeout(() => r(1), 1000)),
        new Promise(r => setTimeout(() => r(2), 1000))
      ]);
      return a + b;
    }
    ANSWER
    約1秒
    クリックして解説を表示
    EXPLANATION

    Promise.all()で2つの1秒待つ処理を並列実行するので、合計で約1秒かかります(順次実行なら2秒)。

  • Q23

    トップレベルawaitとは何ですか?

    ANSWER
    モジュールの最上位でawaitを使える機能
    クリックして解説を表示
    EXPLANATION

    トップレベルawaitはモジュールの最上位(async関数の外)でawaitを使える機能です。ES2022で導入されました。

  • Q24

    async/awaitthen()チェーンの違いは何ですか?

    ANSWER
    同期的な書き方で読みやすい
    クリックして解説を表示
    EXPLANATION

    どちらも同じことができますが、async/awaitの方が同期的なコードのように書けて読みやすく、try-catchでエラーハンドリングできます。

  • Q25

    クロージャとは何ですか?

    ANSWER
    関数と定義時の環境への参照を保持する仕組み
    クリックして解説を表示
    EXPLANATION

    クロージャは「関数とその関数が定義された時点のレキシカル環境(変数)への参照を保持する仕組み」です。外側の変数にアクセスし続けられます。

  • Q26

    次のコードを実行すると何が表示されますか?

    function outer() {
      let count = 0;
      return function() {
        count++;
        return count;
      };
    }
    const counter = outer();
    console.log(counter());
    console.log(counter());
    ANSWER
    1, 2
    クリックして解説を表示
    EXPLANATION

    内部関数はクロージャによりcount変数への参照を保持します。呼び出すたびにcountが増加し、1, 2と表示されます。

  • Q27

    クロージャの主な用途は何ですか?

    ANSWER
    プライベート変数の実現や状態の保持
    クリックして解説を表示
    EXPLANATION

    クロージャはプライベート変数の実現、状態の保持、関数ファクトリの作成などに使われます。

  • Q28

    次のコードを実行すると何が表示されますか?

    function createMultiplier(factor) {
      return function(number) {
        return number * factor;
      };
    }
    const double = createMultiplier(2);
    console.log(double(5));
    ANSWER
    10
    クリックして解説を表示
    EXPLANATION

    createMultiplier(2)factorが2のクロージャを返します。double(5)5 * 2 = 10を返します。

  • Q29

    クロージャでよくある問題は何ですか?

    ANSWER
    ループ内で同じ変数を参照してしまう
    クリックして解説を表示
    EXPLANATION

    ループ内でクロージャを作ると、すべてのクロージャが同じ変数を参照してしまう問題があります。letを使うか即時関数で回避できます。

  • Q30

    次のコードを実行すると何が表示されますか?

    for (let i = 0; i < 3; i++) {
      setTimeout(() => console.log(i), 0);
    }
    ANSWER
    0, 1, 2
    クリックして解説を表示
    EXPLANATION

    letはブロックスコープなので、各イテレーションで新しいiが作られます。0, 1, 2が表示されます。

STAGE 4
3140問目 • 10
  • Q31

    次のコードでvarを使うと何が表示されますか?

    for (var i = 0; i < 3; i++) {
      setTimeout(() => console.log(i), 0);
    }
    ANSWER
    3, 3, 3
    クリックして解説を表示
    EXPLANATION

    varは関数スコープなので、ループ終了後のi(3)がすべてのクロージャで共有されます。3, 3, 3が表示されます。

  • Q32

    プロトタイプとは何ですか?

    ANSWER
    オブジェクトが他のオブジェクトから継承する仕組み
    クリックして解説を表示
    EXPLANATION

    プロトタイプは「オブジェクトが他のオブジェクトからプロパティやメソッドを継承する仕組み」です。JavaScriptの継承の基盤となっています。

  • Q33

    __proto__prototypeの違いは何ですか?

    ANSWER
    __proto__はインスタンスの、prototypeは関数のプロパティ
    クリックして解説を表示
    EXPLANATION

    __proto__はオブジェクトが持つプロトタイプへの参照、prototypeは関数(コンストラクタ)が持つ、インスタンスのプロトタイプになるオブジェクトです。

  • Q34

    プロトタイプチェーンとは何ですか?

    ANSWER
    プロパティを探すときにプロトタイプを辿る仕組み
    クリックして解説を表示
    EXPLANATION

    プロトタイプチェーンは、オブジェクトのプロパティを探すときにプロトタイプを辿っていく仕組みです。見つかるかnullに達するまで続きます。

  • Q35

    次のコードを実行すると何が表示されますか?

    const obj = {};
    console.log(obj.toString());
    ANSWER
    [object Object]
    クリックして解説を表示
    EXPLANATION

    obj自体にtoStringはありませんが、プロトタイプチェーンでObject.prototype.toStringが見つかり、[object Object]が返されます。

  • Q36

    Object.create()は何をしますか?

    ANSWER
    指定したプロトタイプを持つ新しいオブジェクトを作成する
    クリックして解説を表示
    EXPLANATION

    Object.create()は指定したオブジェクトをプロトタイプとする新しいオブジェクトを作成します。

  • Q37

    Object.getPrototypeOf()は何を返しますか?

    ANSWER
    オブジェクトのプロトタイプ
    クリックして解説を表示
    EXPLANATION

    Object.getPrototypeOf()はオブジェクトのプロトタイプ(内部の[[Prototype]])を返します。

  • Q38

    hasOwnProperty()は何を判定しますか?

    ANSWER
    プロパティがオブジェクト自身のものか
    クリックして解説を表示
    EXPLANATION

    hasOwnProperty()はプロパティがオブジェクト自身のものか(プロトタイプチェーンではなく)を判定します。

  • Q39

    イベントループとは何ですか?

    ANSWER
    非同期処理を管理するランタイムの仕組み
    クリックして解説を表示
    EXPLANATION

    イベントループは「コールスタック、タスクキュー、マイクロタスクキューを監視し、非同期処理を管理するJavaScriptのランタイムの仕組み」です。

  • Q40

    コールスタックとは何ですか?

    ANSWER
    実行中の関数を追跡するスタック
    クリックして解説を表示
    EXPLANATION

    コールスタックは「現在実行中の関数を追跡するスタック構造のデータ」です。関数が呼ばれるとプッシュ、終了するとポップされます。

STAGE 5
4150問目 • 10
  • Q41

    マイクロタスクとマクロタスクの違いは何ですか?

    ANSWER
    マイクロタスクの方が優先度が高い
    クリックして解説を表示
    EXPLANATION

    マイクロタスク(Promise等)はマクロタスク(setTimeout等)より優先度が高く、コールスタックが空になると即座に実行されます。

  • Q42

    次のコードを実行すると、表示される順番はどれですか?

    console.log("1");
    setTimeout(() => console.log("2"), 0);
    Promise.resolve().then(() => console.log("3"));
    console.log("4");
    ANSWER
    1, 4, 3, 2
    クリックして解説を表示
    EXPLANATION

    同期処理(1, 4)→マイクロタスク(3)→マクロタスク(2)の順で実行されます。

  • Q43

    次のコードを実行すると、表示される順番はどれですか?

    Promise.resolve().then(() => console.log("1"));
    queueMicrotask(() => console.log("2"));
    setTimeout(() => console.log("3"), 0);
    ANSWER
    1, 2, 3
    クリックして解説を表示
    EXPLANATION

    PromiseのthenqueueMicrotaskは両方マイクロタスクなので1, 2の順で実行され、その後マクロタスクの3が実行されます。

  • Q44

    なぜJavaScriptはシングルスレッドですか?

    ANSWER
    DOM操作の安全性のため
    クリックして解説を表示
    EXPLANATION

    JavaScriptはブラウザのDOM操作を安全に行うためシングルスレッドで設計されています。複数スレッドだとDOMの競合が起きる可能性があります。

  • Q45

    requestAnimationFrame()はどのタイミングで実行されますか?

    ANSWER
    次の画面描画の直前
    クリックして解説を表示
    EXPLANATION

    requestAnimationFrame()は次の画面描画の直前に実行されます。アニメーションに適した約60fps(約16ms間隔)で呼ばれます。

  • Q46

    Fetch APIとは何ですか?

    ANSWER
    HTTP通信を行うためのPromiseベースのAPI
    クリックして解説を表示
    EXPLANATION

    Fetch APIは「HTTP通信を行うためのモダンなJavaScript API」です。Promiseベースで、XMLHttpRequestの代替として使われます。

  • Q47

    fetch()が返すものは何ですか?

    ANSWER
    Responseオブジェクトで解決するPromise
    クリックして解説を表示
    EXPLANATION

    fetch()はResponseオブジェクトで解決するPromiseを返します。レスポンスボディは別途メソッドで取得する必要があります。

  • Q48

    レスポンスボディをJSONとして取得するにはどうしますか?

    ANSWER
    response.json()
    クリックして解説を表示
    EXPLANATION

    Responseオブジェクトのjson()メソッドを呼び出すと、ボディをJSONとしてパースしたPromiseが返されます。

  • Q49

    次のコードは何をしますか?

    fetch('/api/data')
      .then(response => response.json())
      .then(data => console.log(data));
    ANSWER
    APIからJSONデータを取得して表示する
    クリックして解説を表示
    EXPLANATION

    /api/dataにGETリクエストを送り、レスポンスをJSONとしてパースして、その結果をコンソールに表示します。

  • Q50

    fetch()でPOSTリクエストを送るにはどうしますか?

    ANSWER
    fetch(url, { method: 'POST', body: data })
    クリックして解説を表示
    EXPLANATION

    第2引数のオプションオブジェクトでmethod: 'POST'を指定し、bodyにデータを設定します。

STAGE 6
5160問目 • 10
  • Q51

    fetch()でネットワークエラーが発生したらどうなりますか?

    ANSWER
    Promiseがrejectされる
    クリックして解説を表示
    EXPLANATION

    ネットワークエラー(接続不可など)の場合、Promiseがrejectされます。HTTPエラー(404, 500など)はrejectされず、response.okで確認します。

  • Q52

    response.okは何を表しますか?

    ANSWER
    ステータスコードが200-299かどうか
    クリックして解説を表示
    EXPLANATION

    response.okはHTTPステータスコードが200-299の範囲(成功)かどうかを表す真偽値です。

  • Q53

    関数型プログラミングの純粋関数とは何ですか?

    ANSWER
    同じ入力で同じ出力を返し、副作用がない関数
    クリックして解説を表示
    EXPLANATION

    純粋関数は「同じ入力に対して常に同じ出力を返し、副作用を持たない関数」です。予測可能でテストしやすいです。

  • Q54

    高階関数とは何ですか?

    ANSWER
    関数を引数や戻り値として扱う関数
    クリックして解説を表示
    EXPLANATION

    高階関数は「関数を引数として受け取るか、関数を戻り値として返す関数」です。mapfilterreduceなどが該当します。

  • Q55

    カリー化(Currying)とは何ですか?

    ANSWER
    複数引数の関数を1引数の関数の連鎖に変換すること
    クリックして解説を表示
    EXPLANATION

    カリー化は「複数の引数を取る関数を、1つの引数を取る関数の連鎖に変換する」テクニックです。部分適用が可能になります。

  • Q56

    次のコードを実行すると何が表示されますか?

    const curry = (a) => (b) => (c) => a + b + c;
    console.log(curry(1)(2)(3));
    ANSWER
    6
    クリックして解説を表示
    EXPLANATION

    カリー化された関数を順番に呼び出します。1 + 2 + 3 = 6が表示されます。

  • Q57

    関数合成(Function Composition)とは何ですか?

    ANSWER
    複数の関数を組み合わせて新しい関数を作ること
    クリックして解説を表示
    EXPLANATION

    関数合成は「複数の関数を組み合わせて新しい関数を作る」テクニックです。f(g(x))のように関数を連鎖させます。

  • Q58

    flatMap()メソッドは何をしますか?

    ANSWER
    mapしてから1段階フラット化する
    クリックして解説を表示
    EXPLANATION

    flatMap()map()の後にflat(1)を適用した結果を返します。各要素を配列に変換してフラット化するのに便利です。

  • Q59

    次のコードを実行すると何が表示されますか?

    const arr = [1, 2, 3];
    const result = arr.flatMap(x => [x, x * 2]);
    console.log(result);
    ANSWER
    [1, 2, 2, 4, 3, 6]
    クリックして解説を表示
    EXPLANATION

    各要素を[x, x * 2]に変換し、フラット化します。結果は[1, 2, 2, 4, 3, 6]です。

  • Q60

    正規表現とは何ですか?

    ANSWER
    文字列のパターンを表現するための記法
    クリックして解説を表示
    EXPLANATION

    正規表現は「文字列のパターンを表現するための記法」です。検索、置換、バリデーションなどに使われます。

STAGE 7
6170問目 • 10
  • Q61

    JavaScriptで正規表現を作成する方法はどれですか?

    ANSWER
    /pattern/ または new RegExp("pattern")
    クリックして解説を表示
    EXPLANATION

    正規表現はリテラル記法(/pattern/)またはコンストラクタ(new RegExp("pattern"))で作成できます。

  • Q62

    正規表現のgフラグは何を意味しますか?

    ANSWER
    すべてのマッチを検索する
    クリックして解説を表示
    EXPLANATION

    g(global)フラグは「すべてのマッチを検索する」ことを意味します。なしだと最初のマッチで止まります。

  • Q63

    正規表現のiフラグは何を意味しますか?

    ANSWER
    大文字小文字を区別しない
    クリックして解説を表示
    EXPLANATION

    i(ignore case)フラグは「大文字小文字を区別しない」ことを意味します。

  • Q64

    次のコードを実行すると何が表示されますか?

    const regex = /[0-9]+/g;
    const str = "abc123def456";
    console.log(str.match(regex));
    ANSWER
    ["123", "456"]
    クリックして解説を表示
    EXPLANATION

    [0-9]+は1つ以上の数字にマッチします。gフラグですべてのマッチを配列で返します。結果は["123", "456"]です。

  • Q65

    test()メソッドは何を返しますか?

    ANSWER
    マッチするかどうかの真偽値
    クリックして解説を表示
    EXPLANATION

    test()はパターンにマッチするかどうかを真偽値(true/false)で返します。

  • Q66

    正規表現で「メールアドレスの簡易的なパターン」として適切なのはどれですか?

    ANSWER
    /\S+@\S+.\S+/
    クリックして解説を表示
    EXPLANATION

    /\S+@\S+\.\S+/は「空白以外の文字列 + @ + 空白以外の文字列 + . + 空白以外の文字列」にマッチする簡易パターンです。

  • Q67

    replace()メソッドで正規表現を使う利点は何ですか?

    ANSWER
    パターンマッチと一括置換ができる
    クリックして解説を表示
    EXPLANATION

    正規表現を使うと、パターンにマッチする部分を柔軟に置換でき、gフラグですべてのマッチを一度に置換できます。

  • Q68

    Symbolとは何ですか?

    ANSWER
    ユニークで不変のプリミティブ値
    クリックして解説を表示
    EXPLANATION

    Symbolは「ユニーク(一意)で不変のプリミティブ値」です。主にオブジェクトのプロパティキーとして使い、名前の衝突を防ぎます。

  • Q69

    次のコードを実行すると何が表示されますか?

    const sym1 = Symbol("test");
    const sym2 = Symbol("test");
    console.log(sym1 === sym2);
    ANSWER
    false
    クリックして解説を表示
    EXPLANATION

    Symbolは毎回ユニークな値を作成します。同じ説明文字列でも、異なるSymbolになるためfalseです。

  • Q70

    Mapとは何ですか?

    ANSWER
    キーと値のペアを保持するコレクション
    クリックして解説を表示
    EXPLANATION

    Mapは「キーと値のペアを保持するコレクション」です。オブジェクトと違い、キーに任意の型(オブジェクトも)を使え、挿入順が保持されます。

STAGE 8
7180問目 • 10
  • Q71

    MapとObjectの違いは何ですか?

    ANSWER
    Mapはキーに任意の型を使え、順序が保持される
    クリックして解説を表示
    EXPLANATION

    Mapはキーに任意の型を使え、サイズをsizeで取得でき、挿入順が保持されます。Objectのキーは文字列かSymbolのみです。

  • Q72

    次のコードを実行すると何が表示されますか?

    const map = new Map();
    const key = { id: 1 };
    map.set(key, "value");
    console.log(map.get(key));
    ANSWER
    value
    クリックして解説を表示
    EXPLANATION

    Mapはオブジェクトをキーとして使えます。setで設定した値をgetで取得でき、「value」が表示されます。

  • Q73

    Setとは何ですか?

    ANSWER
    重複しない値のコレクション
    クリックして解説を表示
    EXPLANATION

    Setは「重複しない値のコレクション」です。同じ値は1つしか保持されず、挿入順が保持されます。

  • Q74

    次のコードを実行すると何が表示されますか?

    const set = new Set([1, 2, 2, 3, 3, 3]);
    console.log(set.size);
    ANSWER
    3
    クリックして解説を表示
    EXPLANATION

    Setは重複を許さないので、[1, 2, 3]の3つの要素だけが保持されます。sizeは3です。

  • Q75

    WeakMapとは何ですか?

    ANSWER
    キーがオブジェクトで弱い参照を持つMap
    クリックして解説を表示
    EXPLANATION

    WeakMapは「キーがオブジェクトのみで、弱い参照を持つMap」です。キーのオブジェクトが他から参照されなくなるとガベージコレクトされます。

  • Q76

    WeakMapとMapの主な違いは何ですか?

    ANSWER
    弱い参照を持ち、キーがオブジェクトのみ
    クリックして解説を表示
    EXPLANATION

    WeakMapはキーがオブジェクトのみ、弱い参照を持ち、列挙不可で、sizeプロパティがありません。メモリリーク防止に有用です。

  • Q77

    WeakSetとは何ですか?

    ANSWER
    オブジェクトのみを持ち弱い参照を持つSet
    クリックして解説を表示
    EXPLANATION

    WeakSetは「オブジェクトのみを値として持ち、弱い参照を持つSet」です。オブジェクトが他から参照されなくなるとガベージコレクトされます。

  • Q78

    ジェネレーターとは何ですか?

    ANSWER
    実行を一時停止・再開できる関数
    クリックして解説を表示
    EXPLANATION

    ジェネレーターは「実行を一時停止・再開できる特殊な関数」です。function*で定義し、yieldで値を生成します。

  • Q79

    ジェネレーター関数を定義する正しい書き方はどれですか?

    ANSWER
    function* name() { }
    クリックして解説を表示
    EXPLANATION

    ジェネレーター関数はfunction*(functionとアスタリスク)で定義します。

  • Q80

    次のコードを実行すると何が表示されますか?

    function* gen() {
      yield 1;
      yield 2;
      yield 3;
    }
    const g = gen();
    console.log(g.next().value);
    console.log(g.next().value);
    ANSWER
    1, 2
    クリックして解説を表示
    EXPLANATION

    ジェネレーターはnext()を呼ぶたびに次のyieldまで実行します。1回目は1、2回目は2が返されます。

STAGE 9
8190問目 • 10
  • Q81

    イテレーターとは何ですか?

    ANSWER
    next()メソッドを持ち値を順番に返すオブジェクト
    クリックして解説を表示
    EXPLANATION

    イテレーターは「next()メソッドを持ち、{value, done}オブジェクトを返すオブジェクト」です。コレクションを順番に処理できます。

  • Q82

    Symbol.iteratorは何に使われますか?

    ANSWER
    オブジェクトをイテラブルにする
    クリックして解説を表示
    EXPLANATION

    Symbol.iteratorはオブジェクトをイテラブル(for...ofで使用可能)にするためのメソッドを定義するキーです。

  • Q83

    Proxyとは何ですか?

    ANSWER
    オブジェクトへの操作を傍受できるラッパー
    クリックして解説を表示
    EXPLANATION

    Proxyは「オブジェクトへの操作を傍受してカスタマイズできるラッパー」です。プロパティアクセス、代入、関数呼び出しなどをフックできます。

  • Q84

    次のコードを実行すると何が表示されますか?

    const target = { name: "太郎" };
    const proxy = new Proxy(target, {
      get(obj, prop) {
        return prop in obj ? obj[prop] : "存在しない";
      }
    });
    console.log(proxy.age);
    ANSWER
    存在しない
    クリックして解説を表示
    EXPLANATION

    Proxyのgetトラップで、存在しないプロパティにアクセスすると「存在しない」を返すようにしています。

  • Q85

    Proxyのトラップとは何ですか?

    ANSWER
    操作を傍受して処理するメソッド
    クリックして解説を表示
    EXPLANATION

    トラップはProxyが傍受できる操作(get、set、deletePropertyなど)を処理するためのメソッドです。

  • Q86

    Reflectとは何ですか?

    ANSWER
    オブジェクト操作をメソッドとして提供するもの
    クリックして解説を表示
    EXPLANATION

    Reflectは「オブジェクトの操作をメソッドとして提供する組み込みオブジェクト」です。Proxyのトラップと対応するメソッドを持ちます。

  • Q87

    Reflect.get()は何をしますか?

    ANSWER
    プロパティを取得する
    クリックして解説を表示
    EXPLANATION

    Reflect.get()はオブジェクトからプロパティを取得します。obj[prop]と同様ですが、関数として呼び出せます。

  • Q88

    モジュールパターンとは何ですか?

    ANSWER
    クロージャでプライベート状態を隠蔽するパターン
    クリックして解説を表示
    EXPLANATION

    モジュールパターンは「クロージャを使ってプライベートな状態を隠蔽し、公開APIのみを返す」デザインパターンです。

  • Q89

    次のコードはどのパターンを実装していますか?

    const counter = (function() {
      let count = 0;
      return {
        increment() { count++; },
        getCount() { return count; }
      };
    })();
    ANSWER
    モジュールパターン
    クリックして解説を表示
    EXPLANATION

    即時関数とクロージャを使ってcountを隠蔽し、公開メソッドのみを返すモジュールパターンです。

  • Q90

    シングルトンパターンとは何ですか?

    ANSWER
    インスタンスが1つだけ存在することを保証するパターン
    クリックして解説を表示
    EXPLANATION

    シングルトンパターンは「クラスのインスタンスが1つだけ存在することを保証する」デザインパターンです。

STAGE 10
9194問目 • 4
  • Q91

    次のコードはどのパターンを実装していますか?

    class Database {
      static instance = null;
      static getInstance() {
        if (!Database.instance) {
          Database.instance = new Database();
        }
        return Database.instance;
      }
    }
    ANSWER
    シングルトンパターン
    クリックして解説を表示
    EXPLANATION

    getInstance()で常に同じインスタンスを返すシングルトンパターンです。

  • Q92

    オブザーバーパターンとは何ですか?

    ANSWER
    状態変化を依存オブジェクトに通知するパターン
    クリックして解説を表示
    EXPLANATION

    オブザーバーパターンは「あるオブジェクトの状態変化を、依存するオブジェクトに自動的に通知する」デザインパターンです。

  • Q93

    オブザーバーパターンの主な用途は何ですか?

    ANSWER
    イベント処理や状態管理
    クリックして解説を表示
    EXPLANATION

    オブザーバーパターンはイベント処理、状態管理、MVC/MVVMアーキテクチャなどで広く使われます。

  • Q94

    ファクトリパターンとは何ですか?

    ANSWER
    オブジェクト作成を専門メソッドに委譲するパターン
    クリックして解説を表示
    EXPLANATION

    ファクトリパターンは「オブジェクトの作成を専門のメソッドに委譲する」デザインパターンです。作成ロジックを隠蔽できます。