Javascript 第5版 第8章
■8.1.1 入れ子型の関数
function内に入れ子で関数を定義できるが、ifやforなどの文ブロック中には定義できない(関数リテラルは除く
function main(){
function(){
// OK
}
if(true){
function(){
// ダメ
}
var k = function(){
// OK
}
}
}
■8.2.1省略可能な引数
関数で引数を省略したときに、デフォルト値を設定するif(!elem) はelemがnullまたは未定義でないかを判定できる。
同様にelem = elem || []; はelemが存在するならelemeを代入、そうでないなら[]を代入となる。
function test(o){
if(!o) o = [];// oを指定しない時
}
function test(o){
var o = o || [];// 上と同じ意味
}
■ Argumentsオブジェクト 可変長の引数リスト
argumentsは関数内で使うことができ、配列のようなオブジェクトで、中身に関数を呼び出したときの引数が入っている。
!Argumentsオブジェクト≠配列
function test(){
console.log(arguments);// [1,2,3]}
test(1,2,3)
これを利用すれば、可変長の引数を持つ関数も作ることができる。仮引数は定義しないで、argumentsで引数を得ることで引数内の最大値を返す
function max(/* ... */){
var m = Number.NEGATIVE_INFINITY;//数値型の-Infinityを代入
for(var i=0,l=arguments.length;i<l;i++){
if(arguments[i] > m) m = arguments[i];
}
return m;// 30
}
max(1,3,5,30, -2);
■8.2.2.1 calleeプロパティ
Argumentsオブジェクトにはcalleeというプロパティが定義されている。arguments.calleeは現在実行中の関数を参照するので、関数内で使えば、自身を呼び出すので、
再帰的に呼び出す関数を作成できます。
(function(x){
if(x <=1)return 1;
return x * arguments.callee(x-1);//arguments.calleeは呼び出した関数そのもの
// 5*4*3*2*1 = 120 となる
})(5)
コメント(0件)
- TB-URL http://efcl.info/adiary/024/tb/