blog.waterlow.work

Ruby, Rails, js, etc...

【JS】テストコード書き書きしながら関数の勉強3

引き続き下記の本を読んでの感想です!

テスト駆動JavaScript

テスト駆動JavaScript

(これを読んだらなにが出来る様になるのか…!) *** 5.3.4グローバルオブジェクト トップレベルのthisとwindowは同じ。だから

|javascript| window.alert('アラート'); alert('アラート'); ||< 上の2行のコードは同様。しかもブラウザは自身の情報であるwindowプロパティを持っている。そのため |javascript| var global = this; test("GlobalObjectTest", 3, function(){ // トップレベルのthisとwindowは同じ deepEqual(global, window, 'global == window'); // トップレベルのthisのプロパティwindowとwindowは同じ deepEqual(global.window, window, 'global.window == window'); // windowのプロパティwindowとwindowは同じ deepEqual(window.window, window, 'window.window == window'); }); ||< window.windowなんて呼び出しでもアクセスできる。

*** 5.3.5スコープチェーン スコープチェーンのことはよくわからなかったのですが、 もし自身のプロパティにその名前がなければ上のスコープまで探しに行くという意味のようです。 実際グローバル変数がどこからでも見えるのは、スコープチェーンでトップレベルまで見に行くからです。 それよりも以下のサンプルソースではクロージャのほうが驚きでした。 クロージャに関してはまたどこかでやりましょう!

|javascript| test("test_chain", function () { var inc = adder(1); var dec = adder(-1);

// inc、decは関数で、自身でbaseの情報を保存している。 equal(inc(2), 3, "inc(2) equals 3"); equal(dec(4), 3, "dec(4) equals 3"); equal(dec(inc(3)), 3, "dec(inc(3)) equals 3"); }); ||<