// スコープチェーン: // (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, '繰り上がる'); }); }
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', '演習'); }); }
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'); });