[1,2,3] は 3 を取得でき、「123」も 3 を取得できます。js について少し知っている人なら誰でもこれを知っています。
しかし、eval.length、RegExp.length、"".toString.length、1..toString.length は何を取得するのでしょうか?
それぞれ 1、2、0、1 になりますが、これらの数字は何を表していますか?
実際、関数の長さは仮パラメータの数を取得します。
例を簡単に見てみましょう:
function test(a,b,c) {} test.length // 3 function test(a,b,c,d) {} test.length // 4
非常に単純ですが、実際にパラメータを定義せずに関数内の引数を介してパラメータが呼び出された場合、長さは 0 しか取得されません。
function test() { console.log( arguments );} test.length // 0
この関数は確かにパラメータを渡すことができ、パラメータも内部的に呼び出されますが、length は渡されるパラメータの数を知ることができません。
実際のパラメータの数は、関数の実行時に引数 length を通じてのみ取得できます。
function test() { console.log( arguments.length );} test(1,2,3); // 输出 3 test(1,2,3,4); // 输出 4
つまり、関数の長さ属性は仮パラメータの数のみを取得でき、実際のパラメータの数は取得できません。