JavaScript第5版(135p〜143p)

今日は息子の誕生日。
12日に満員電車で読んでいた部分。

JavaScript 第5版

JavaScript 第5版

8.6.1 lengthプロパティ(p136)

ここででてきているcalleeの使い方。

function check(args) {
  var actual = args.length;
  var expected = arguments.callee.length;
}

actualには呼び出し時の引数の個数。
expectedには宣言時の引数の個数
var expectedの行がargsだとcalleeはundefinedになる。
8.2.2.1のcalleeプロパティ参照

8.6.3 自分専用の関数プロパティの定義(p137)

function test(flag) {
  var data;
  if(!data) data = {
                     num:0,
                     get:function(){return this.num;},
                     add:function(){this.num++;}
                   };
  if(flag) {
    data.add();
  }
  return function() {
    console.log(data.get());
  }
}
console.log('clear');
var init = test();
init(); // 0
var hello = test('add');
hello(); // 1
init(); // 0
console.log('fin');

関数オブジェクトinitとhelloのCallは別になるので、関数内部のオブジェクトdataは違う参照となっている。
同じであれば、2回目のinit()で1が出るはずだ。

8.6.4 apply()メソッドとcall()メソッド(p139)

prototype.jsのbindだよね。
でもまだthisがよくわかっていなかったり。。。