JavaScript フラッシュカード

カテゴリースポンサー

JavaScriptは多用途で動的なプログラミング言語であり、現代のWeb開発において不可欠な部分です。もともとは静的なHTMLページにインタラクティビティを加えるために作られたJavaScriptは、クライアントサイドとサーバーサイドの両方で使用できる強力なツールへと進化しました。

当社のフラッシュカードアプリには、JavaScriptの知識が必要な面接に効果的に対応するための、厳選されたJavaScript面接問題とその詳細な回答が含まれています。IT Flashcardsは求職者のためのツールだけでなく、現在のキャリアプランに関係なく、知識を強化しテストするための優れた方法です。アプリを定期的に使用することで、最新のJavaScriptのトレンドに常に追いつき、スキルを高いレベルで維持することができます。

アプリからのJavaScriptフラッシュカードのサンプル

App Store または Google Play から当社のアプリをダウンロードして、さらに多くの無料のフラッシュカードを入手するか、すべてのフラッシュカードにアクセスするために購読してください。

JavaScriptのレキシカルスコープとは何ですか?

JavaScriptにおけるレキシカルスコープは、変数の可視範囲がコード内の位置によって決定されるという原則です。これは、変数が定義されたブロック内、および任意のネストされたブロック内でアクセス可能であることを意味します。これにより、クロージャの作成や変数へのアクセス制御が可能になります。JavaScriptコードでのレキシカルスコープの使用例は次の通りです:
function outerFunction() {
  let outerVariable = `I'm outside!`;

  function innerFunction() {
    console.log(outerVariable); // Has access to the 'outerVariable'
  }

  innerFunction();
}
outerFunction(); // Displays `I'm outside!`

レキシカルスコープは、内部関数が外部関数で定義された変数にアクセスすることを可能にし、外部関数が終了した後もこれらの変数にアクセスできます。これはJavaScriptのクロージャを作成する際の重要な要素であり、アプリケーションのより柔軟な状態管理を可能にします。

ホイスティングとは何ですか?

ホイスティングは、JavaScriptの言語のメカニズムで、変数や関数がコードが実行される前にそのスコープの最上部に移動するというものです。実際には、これは宣言されていない関数や変数を使用することができるということを意味します。

ただし、変数と関数に対するホイスティングの動作は少し異なることに注意すべきです。

varキーワードで宣言された変数の場合、ホイスティングされるのは宣言のみで、初期化はホイスティングされません。宣言前に初期化された変数はundefinedとして返されます。

変数のためのホイスティングコードの例:
console.log(myVar); // undefined
var myVar = 5;
console.log(myVar); // 5

関数については、ホイスティングは関数の宣言と定義の両方を上部に移動し、宣言前に関数を使用できるようにします。

関数のためのホイスティングコードの例:
console.log(myFunction()); // "Hello World"

function myFunction() {
  return "Hello World";
}

ホイスティングはletとconstで宣言された変数には行われません。

アロー関数とは何で、その利点は何ですか?

矢印関数、別名矢印関数は、ECMAScript 6 (ES6)で導入された関数の一種です。矢印( => )を使用した特別な構文を定義するため、矢印関数と呼ばれます。

比較のために、伝統的な関数はこのように見えるかもしれません:
function sum(a, b) {
  return a + b;
}

その矢印関数としての同等物は以下のようです:
const sum = (a, b) => a + b;

矢印関数の主な利点は、自身の実行コンテキスト(thisへのバインディング)を作成しない点で、これはJavaScriptでのエラーのよくある原因です。矢印関数では、thisは周囲のコンテキストから継承されます。別の利点は、構文の簡潔さで、特に関数が他の関数に引数として使用される場合、例えば高階関数などに便利です。

一方、自身のthisが欠けているため、矢印関数はコンストラクタ(創造的な)オブジェクトの定義やプロトタイプオブジェクトのメソッドの作成には適していません。

Promiseオブジェクトとは何で、どのように使用しますか?

JavaScriptのPromiseオブジェクトは非同期操作を処理するために使用されます。Promiseは、Promiseが作成された時点では利用できないかもしれない値を表しますが、将来的には利用可能になるか、あるいは全く利用可能にならないかもしれません。

Promiseオブジェクトは次の3つの状態のいずれかになります:
1. Pending - 操作はまだ進行中で、成功もエラーも発生していません。
2. Fulfilled - 操作が成功し、Promiseは値を返しました。
3. Rejected - 操作がエラーで終了し、Promiseはエラーの理由を返しました。

満足したか、あるいは拒否されたPromiseは「決定」されたとみなされ、その状態は決して変わりません。

Promiseオブジェクトの作成:
const promise = new Promise((resolve, reject) => {
  const success = true;
  if (success) {
    resolve('Operation successful.');
  } else {
    reject('Operation failed.');
  }
});

Promiseオブジェクトの使用:
promise
  .then(result => {
    console.log(result); // Will print: 'Operation successful.'
  })
  .catch(error => {
    console.log(error);
  });

.then()メソッドはPromiseが満足されたときに、.catch()メソッドはそれが拒否されたときに実行されます。どちらのケースでも、操作の結果やPromiseの拒否の理由が引数として渡されます。

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

コールバックは、別の関数に引数として渡され、その関数が完了した後に実行(呼び戻し)される関数を指します。コールバック関数は、JavaScriptでよく使用され、特にAJAXリクエストやイベント処理などの非同期操作で使用されます。

コールバック関数は通常、特定の操作の結果を引数として受け取るため、それらの結果の処理や分析に使用されます。

そのような関数の使用例は次のとおりです:
function executeAfterTimeout(callback, timeout) {
  setTimeout(() => {
    console.log('Time passed!');
    callback();
  }, timeout);
}

executeAfterTimeout(() => {
  console.log('This is a callback!');
}, 2000);

この場合、関数 `executeAfterTimeout` は `callback` 関数をパラメータとして受け取り、指定された時間が過ぎた後に実行されます。コールバック関数は、JavaScriptの非同期制御フローを管理するために非常に役立ちます。

ヌル合体演算子とは何で、どのように機能しますか?

Nullish Coalescing Operator(??)は、左側がnullまたは未定義の場合に動作の右側を返す論理演算子です。つまり、変数が空の場合、nullish coalescing演算子は定義済みの値を結果として返します。

基本的な記法は次のとおりです:
let value = null ?? 'default value';

この場合、左側(値)がnullなので、結果は'default value'です。さらに、この演算子はOR演算子(||)と異なり、OR関数は左側が假(假、0、''、null、未定義、NaN)の場合に右側を返しますが、nullish coalescing演算子は左側がnullまたは未定義のときのみ右側を返します。

ORとの比較例:
let value1 = 0 || 'default';
console.log(value1); // 出力: 'default' なぜなら 0 は假値だから

nullish coalescingを用いた例:
let value2 = 0 ?? 'default';
console.log(value2); // 出力: 0 なぜなら 0 は null や未定義ではないから

したがって、ORとは異なり、nullish coalescing演算子は0、''、NaNを「空の」値とは扱いません。

Symbolとは何で、いつ使用すべきですか?

JavaScriptのSymbolは、独特で不変のデータタイプで、オブジェクトの独特なプロパティを識別するのによく使用されます。

Symbol()コンストラクタを呼び出すことにより、Symbolを作成することができます。これは、呼び出すたびに独特なシンボルを作成します。たとえ同じ引数でSymbol()コンストラクタを呼び出したとしても、作成されるシンボルはすべて異なります。
const symbol1 = Symbol('mySymbol');
const symbol2 = Symbol('mySymbol');
console.log(symbol1 === symbol2); // falseを返します

Symbolは、オブジェクトの(独特な)プロパティを定義するのによく使用されます。特に、このプロパティを隠しておきたい、またはプライベートにしておきたい場合です。また、for ... inやfor ... ofを使用してオブジェクトをイテレートするときに考慮されないプロパティを覆い、Object.keys()メソッドによって返されないプロパティを覆います。さらに、シンボルは「擬似」プライベートプロパティの作成を可能にします。
let obj = {};
let privateProperty = Symbol('private');

obj[privateProperty] = 'This is private';

console.log(obj[privateProperty]); // 'This is private'
console.log(Object.keys(obj)); // []

Symbolを使用する際の確固としたルールはありません。一般的には、オブジェクト上に簡単に見ることができない、または変更できない独特なプロパティを作成したい場合、またはオブジェクトの動作に影響を与えるメソッドを定義したい場合に使用されます。

WeakMapとWeakSetとは何ですか?

WeakMapWeakSetは、JavaScriptのMapとSetオブジェクトの特別なバージョンで、ガーベジコレクタによる自動的なメモリ解放を防ぎません。

WeakMapは、キーがオブジェクトである必要があり、値は何でもよいキーと値のペアのコレクションです。MapとWeakMapの主な違いは、WeakMapのキーが"弱く"保持されるということです。つまり、キーオブジェクトへの他の参照がない場合、それはガーベジコレクションされ、WeakMapから自動的に削除されます。

以下にWeakMapの使用例を示します:
let john = { name: "John" };

let weakMap = new WeakMap();
weakMap.set(john, "...");

john = null; // 参照を上書き

// johnはメモリから削除されます!

WeakSetは、WeakMapがMapに対してどういうものであるかと同様に、オブジェクトのセットで、オブジェクトが他の場所で見えない場合、ガーベッジコレクションを防ぎません。`size`や`clear`のような典型的なSetメソッドを持たず、`add`メソッドはオブジェクトのみを取ります。

WeakSetの使用例:
let john = { name: "John" };

let weakSet = new WeakSet();
weakSet.add(john);

john = null; // 参照を上書き

// johnはメモリから削除されます!

WeakMapとWeakSetの両方は、主に、オブジェクト自体が削除されるときに削除されるべきオブジェクトについての追加情報を保存したい状況で使用されます。

ダウンロード ITフラッシュカード 今すぐ

当社のフラッシュカードでJavaScriptの知識を広げよう。
プログラミングの基礎から高度な技術の習得まで、ITフラッシュカードはITの卓越性へのパスポートです。
今すぐダウンロードして、今日の競争力のある技術世界での可能性を発見しましょう。