Engineer as a Lifestyle @tenkoma

What We Find Changes Who We Become -- Peter Morville『アンビエント・ファインダビリティ 』

引数

javascript 第五版 p.130
javascriptは引数の型チェックも個数チェックもないので、(足りないと未定義値に、多いときは引数名ではとってこれないが、argumentsオブジェクトから参照できるよ)省略可能な引数にコメントを付けておくのはいい習慣らしい。

長く使う関数なら

p.131
型チェックして例外を投げるべき?

applyメソッド

p.132
flexisum関数からflexisum関数を呼び出すのに(再帰呼び出し)、flexisum.apply(this, element)という風に呼び出しているが、意味がわからない。
ちょっとページをとばしてp.138に説明が書いてあるので読む。
そこにはまた、callメソッドの説明が書かれているが、これがよくわからない。applyメソッドについてはMath.max()での例でわかった気がする。
配列の中の最大値を求めたいとき、Math.max()を使えばできるんじゃね?って思うかもしれないが、この関数に配列を渡してもだめ。

Math.max([1,2,3])
Nan

Math.max()はすべての引数が数値に変換可能なとき以外はNaNを戻すようだ。
しかし以下のように書くと、Math.max関数を利用して最大値を求めることができる。

var maximum = Math.max.apply(null, [1,10,2,9,3,8,4,7,5,6]);

このコードは以下のコードとほぼ同じ意味らしい

var maximum = Math.max(1,10,2,9,3,8,4,7,5,6);

最近のEcmaScript仕様(どのバージョンからかはわからなかった)にはすべての関数にcallメソッドとapplyメソッドが付いてくるとある。
二つの関数function1とfunction2があったとき、function1のブロック内で、

function2.apply(this, hoge);

と呼び出す(但しhogeは配列でなければならない)と、function2がfunction1のメソッドであるかのように呼び出せる、とある。
こう、日記に書いていて、字面では理解できるのだが、自分でも何を言っているのかわからない感じです

メソッド

オブジェクトのプロパティに関数オブジェクトを代入すれば、それはもうメソッド

例8-2

var i = operate(add, operate(add, 2, 3), operate(multiply, 4, 5)); // (2+3) + (4*5)

ポーランド記法っぽい。