JavaScriptで関数の引数の数
- カテゴリ:
- JavaScript
- コメント数:
- Comments: 0
◆ fn.length (Function.prototype.length) : に関数定義に書かれている引数の数
◆ 関数内で arguments.length : 実行時に渡された引数の数
◆ 関数内で arguments.length : 実行時に渡された引数の数
JavaScript では関数実行時に arguments という引数が勝手に作られます
こいつには 実行時に渡された引数 と 自分自身への参照が入っています
引数のリストは配列のように入っていて length プロパティもあります
なので実行された時に 渡された引数の数を知ることは出来ます
じゃあ 関数が本当に期待してる数は?
定義してるのより少なくても多くてもOKな可変引数な言語だし そういう値はとれない?
と思ってたんですが lo-dash を使った時にカリー化でちゃんと引数の数が定義した数と合ったときに実行されていて 足りていないとラッパ関数が返り値になっていました
ということは 取得する方法がある!!
lo-dashほどのライブラリだと 特殊な方法を使って持ってきてたりしそうと思いながらもコードを呼んでると……
なんと fn.length
関数の length プロパティ
これだけでした
あー こんなのでとれるんだ
そんな簡単なものだったんだ
言われてみると昔みたことあるようなないような
聞いたことがあったとしても使うことがなさすぎて頭が抜けてますね
本当に どこで使うんでしょうか
カリー化関数作る時くらい?
なくてもいいやつですからね
こいつには 実行時に渡された引数 と 自分自身への参照が入っています
引数のリストは配列のように入っていて length プロパティもあります
なので実行された時に 渡された引数の数を知ることは出来ます
fn(1, undefined) と実行すると 引数の数は2で arguments[1] にはundefined が値として入っています
arguments[2] などにアクセスしても返ってくる値は一緒ですが 値として入っていると配列化してforEach でループした時に実行されたり キー(添字)が存在するという違いがあるので一応知っておいたほうがいいと思います
arguments[2] などにアクセスしても返ってくる値は一緒ですが 値として入っていると配列化してforEach でループした時に実行されたり キー(添字)が存在するという違いがあるので一応知っておいたほうがいいと思います
じゃあ 関数が本当に期待してる数は?
定義してるのより少なくても多くてもOKな可変引数な言語だし そういう値はとれない?
と思ってたんですが lo-dash を使った時にカリー化でちゃんと引数の数が定義した数と合ったときに実行されていて 足りていないとラッパ関数が返り値になっていました
lo-dash は underscore.js とほぼ一緒のとっても便利なライブラリです
underscore.js よりちょっと高機能です
underscore.js よりちょっと高機能です
ということは 取得する方法がある!!
lo-dashほどのライブラリだと 特殊な方法を使って持ってきてたりしそうと思いながらもコードを呼んでると……
なんと fn.length
関数の length プロパティ
これだけでした
あー こんなのでとれるんだ
そんな簡単なものだったんだ
言われてみると昔みたことあるようなないような
聞いたことがあったとしても使うことがなさすぎて頭が抜けてますね
本当に どこで使うんでしょうか
カリー化関数作る時くらい?
ところで
JavaScriptの新機能の デフォルト引数が付けられた引数は fn.length に含まれないようですなくてもいいやつですからね
(function(x,y,z){}).length // 3
(function(x,y=1,z=2){}).length // 1
(function(x,y=1,z=2){}).length // 1