Example #1
0
// スコープチェーン:
// (main)-->(グローバルオブジェクト)
export default function main() {
  // スコープチェーン:
  // (makeCounter)--> { assert: ..., makeCounter: ..., count: ... } --(main)--> ...
  function makeCounter() {
    const value = 1;

    // スコープチェーン:
    // (countClosure)--> { value: 1, countClosure: ... } --(makeCounter)--> ...
    function countClosure() {
      return value;
    }

    return countClosure;
  }

  // countClosure() はクロージャなので、次のスコープチェーンを保持している
  // (countClosure)--> { value: 1, countClosure: ... } --(makeCounter)--> ...
  // なので、makeCounter() の外側にいるにもかかわらず、count() は value を参照できる
  const count = makeCounter();

  describe('makeCounter() の内側の変数を外から参照できる', function() {
    assert.ok(count() === 1, '例1');
  });

  describe('演習: makeCounter() を修正して、count() を呼び出す度に value の値が繰り上がるようにする', function() {
    assert.ok(count() === 2, '繰り上がる');
    assert.ok(count() === 3, '繰り上がる');
    assert.ok(count() === 4, '繰り上がる');
  });
}
Example #2
0
export default function main() {
  describe('import で他のモジュールで定義した関数を参照できる', () => {
    assert.ok(sayHello() === 'hello', '例1');
    assert.ok(sayHello2() === 'hello2', '例2');
    assert.ok(sayHello3() === '', '演習3');
  });

  describe('演習: SayHello 形式でsayHello2()を呼び出す', () => {
    assert.ok(SayHello === 'hello2', '演習');
  });
}
Example #3
0
export default function main() {
  describe('グループA', () => {
    const objectA = {};
    const objectB = objectA;
    const objectC = {};

    // 演習: 結果を予想してみる
    assert.fail({} === {}, '演習1');
    assert.fail(objectA === objectB, '演習2');
    assert.fail(objectA === objectC, '演習3');

    const arrayA = [];
    const arrayB = arrayA;
    const arrayC = [];

    // 演習: 結果を予想してみる
    assert.fail([] === [], '演習4');
    assert.fail(arrayA === arrayB, '演習5');
    assert.fail(arrayA === arrayC, '演習6');
  });

  describe('グループB', () => {
    const booleanA = true;
    const booleanB = booleanA;
    const booleanC = true;

    // 演習: 結果を予想してみる
    assert.fail(true === true, '演習1');
    assert.fail(booleanA === booleanB, '演習2');
    assert.fail(booleanA === booleanC, '演習3');

    const numberA = 1;
    const numberB = numberA;
    const numberC = 1;

    // 演習: 結果を予想してみる
    assert.fail(1 === 1, '演習4');
    assert.fail(numberA === numberB, '演習5');
    assert.fail(numberA === numberC, '演習6');
  });
}
import { describe, assert, runTest } from 'jw-test-utils';

describe('オブジェクト (Object)', () => {
  const objectA = {};

  const objectB = objectA;
  assert.ok(objectA === objectB, '例1');

  const objectC = {};
  assert.ok(objectA !== objectC, '例2');
});

describe('ブーリアン (Boolean)', () => {
  const booleanA = true;

  const booleanB = booleanA;
  assert.ok(booleanA === booleanB, '例1');

  const booleanC = true;
  assert.ok(booleanA === booleanC, '例2');
});

describe('配列 (Array)', () => {
  const arrayA = [];

  const arrayB = arrayA;
  assert.ok(arrayA === arrayB, '例1');

  const arrayC = [];
  assert.ok(arrayA !== arrayC, '例2');
});